It largely depends on the definition of "class" you're using. You'll raise some eyebrows calling structs that can't support implementation inheritance "classes".
You can also have implement different associated functions based on properties of generic arguments, which is quite different in design from just attaching methods to a struct.