Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-08-22 16:07:36


"Alex Chovanec" <achovane_at_[hidden]> writes:

> "Jonathan Turkanis" <technews_at_[hidden]> wrote in message
> news:cgal34$l63$1_at_sea.gmane.org...
>
>> Currently there is detail::is_incrementable, which works well if you
>> only need to distinguish between iterators and very different types.
>> For instance, I would guess that very few if any containers are
>> incrementable (I'd be happy to be proved wrong here), so that if you
>> want define a function which behaves differently for container and
>> iterators you can use is_incrementable.
>
> In this case, I need to know whether or not type T is dereferenceable (and
> more generally, whether or not it's an iterator). I have a small template
> metaprogram which determines how an instance of type T should be treated. If
> it's an iterator, I want to dereference it. Otherwise, I don't.
>
>> Don't forget pointers. Also these operators can also be defined as
>> non-member functions.
>
> Pointers are fairly easy to handle. I forgot to mention that I provide a
> partial template specialization for this case: for any type T,
> 'is_iterator<T *>::value' evaluates to true.
>
> You bring up an important point about operators defined as non-member
> functions. My current implementation doesn't handle this case, but I may yet
> be able to fix that. :-)

That's easy to fix; use the same technique as is_incrementable does.
The traits are a harder problem.

-- 
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk