On 2011-06-12 18:20, Mehrdad wrote: > Is there any particular reason that structs and unions can't implement > interfaces? > > If that was possible, template conditions could become much simpler > for a variety of cases, such as for checking if something is a > particular type of range or container. > > Thoughts?
They aren't virtual. For an interface to work, it has to be virtual. structs are value types, not reference types. They have no virtual table and have no polymorphism. At best, there could be a way to indicate that a struct happens to have functions which match what the interface has, which could then be used for static instrospection, but you could never actually use a struct as an interface. But there is not currently any way to use an interface to check whether a struct implements a particular set of functions. And while eponymous templates such as isForwardRange could be simplified with such a feature, their usage would be the same, so it might help, but it wouldn't really help with template constraints. Not to mention, interfaces are likely to be far stricter about types than templates are, so it might be difficult to get that to work generically. Regardless, I'm very leery of associating interfaces and structs in any way shape or form, because they are _very_ different things. - Jonathan M Davis
