|
Boost : |
From: Alex Chovanec (achovane_at_[hidden])
Date: 2004-08-22 19:28:36
"David Abrahams" <dave_at_[hidden]> wrote in message
news:ullg6287u.fsf_at_boost-consulting.com...
> "Alex Chovanec" <achovane_at_[hidden]> writes:
> >
> > The 'is_iterator' struct template is a model of the "integral constant
> > expression" concept. Thus, 'is_iterator<T>::value' evaluates to true
> > if-and-only-if type T defines iterator traits
>
> I don't believe that's detectable without generating an error. Don't
> forget that iterator_traits can be specialized; there's no reason the
> iterator has to contain members. Quick test: what is
> is_iterator<int*>::value?
I don't really see why this a problem. 'is_iterator' can be specialized too,
and that is what I have done for the case of pointers:
template <typename T>
struct is_iterator<T *>
{
typedef is_iterator type;
typedef bool value_type;
BOOST_STATIC_CONSTANT(value_type, value = true);
};
So 'is_iterator<int *>::value' evaluates to true without generating a
compile error, as it should.
Alex
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk