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