Example 6: A naive attempt at Type Fixing.
template <typename C> class sequence_range { public: enum { C_HAS_MUTABLE_INTERFACE = has_iterator_type<C>::value && has_pointer_type<C>::value }; typedef typename select_first_type< typename C::reference , typename C::const_reference , C_HAS_MUTABLE_INTERFACE >::type reference; typedef typename C::const_reference const_reference; ...