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;
...