What’s the difference between an abstract class and a Java-style interface in a language that allows multiple inheritance? I’ve generally thought of interfaces as a way to get some of the features of multiple inheritance while preventing the parts of multiple inheritance that cause issues (e.g. the diamond problem). However, these days, every language I know of that has single inheritance+interfaces allows interfaces (or traits, in the case of PHP) to specify default implementations of their methods.
@OP: I'm curious about your motivation to post here. Are you looking for feedback? Getting people to try it out? Use it? I found it interesting to read (you had me at "trainwreck"), but you also posted a lot of warning signs: Toy, not production ready, proof of concept. Without going into detail why that is. Are you using it? Have you found any drawbacks? Why is it a toy library instead of a library?
Why would you not just use lexicographical_compare() to implement your operator<() for containers?
Range-v3 (https://github.com/ericniebler/range-v3) exists solving the same problem, and there's a standardization proposal (http://en.cppreference.com/w/cpp/experimental/ranges).