I'm not sure I understand the point of this. Or rather, I don't understand the point of this as distinct from the point of just having a concept and a template: ``` template<typename C> concept Container = requires(C c) { {c.begin()} -> is_pointer_type; {c.end()} -> is_pointer_type; {c.end()} -> std::is_same<decltype(c.begin())>; //etc. }; template<Container C> auto &operator<<(std::ostream&, C const&c); ``` If there is no vtable, and the lookup is all done at compile-time, then I see no need to restrict everything to such a coarse mechanism as overriding specific functions by signature. Concepts are the compile-time way to define statically-polymorphic prototypes, and concept-checking is how we declare that a function takes a statically-polymorphic prototype.
Ok sorry, I was unfamiliar with the latest standards. But my
approach is much simpler / cleaner to write for inheritance. What
can't we do with inheritance in the first place anyway?