
Steven Watanabe wrote:
Wait. How does that work:
Right triangle models Triangle. Equilateral triangle models Triangle. Therefore, right triangle can be converted to equilateral triangle?
Actually I meant only the concept it directly models, not the ones which are indirectly so. A model of Right triangle can be constructed from any model of Right triangle, but not from a model of Triangle. The idea is to be able to have similar mechanisms to that of containers/ranges with adaptors, such as this example: SomeContainer a = transform(some_range, some_function); (actually you have to write SomeContainer a( begin(transform(some_range, some_function)), end(transform(some_range, some_function)) );) with transform = make_transform_range from Boost.RangeEx. This results in something fairly equivalent to SomeContainer a; std::transform( some_range.begin(), some_range.end(), std::back_inserter(a), some_function ); Maybe it shouldn't be required however. For ranges which are proxies or adaptors it makes little sense to be able to be constructed from any range.