Example 3: Type Detection, Type Fixing, and Type Selection at work.
template <typename C> class sequence_range { private: // Type Detection enum { C_HAS_MUTABLE_INTERFACE = . . . ??? . . . }; // Type Fixing typedef typename typefixer_iterator<C , C_HAS_MUTABLE_INTERFACE >::iterator putative_iterator; public: typedef typename C::const_iterator const_iterator; // Type Selection typedef typename select_first_type< putative_iterator , const_iterator , C_HAS_MUTABLE_INTERFACE >::type iterator; ...