Hello,

after bug 40497, an is_iterator machinery was added to restrict the C++0x
prototypes of std::next and std::prev.

An alternative solution seems to be to use this same machinery in the
definition of iterator_traits so that when a class T is not a pointer and does
not provide iterator_category (and possibly the 4 other types),
iterator_traits<T> is empty (instead of containing 5 broken typedefs). This way
iterator_traits can work with sfinae. It allows reverting the prototypes of
next and prev to the standard ones. It is also more or less what Howard
recommends (see
http://groups.google.com/group/comp.lang.c++/browse_thread/thread/54b1537c08997e10/5006b7e443ef0c62
).

Now, this would incidentally let code with user-defined distance functions work
as people expect, which has been argued against strongly in the past by Gaby
(but then his arguments would likely forbid the resolution of bug 40497).

What is your current opinion on this?


-- 
           Summary: merge is_iterator into iterator_traits
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: marc dot glisse at normalesup dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45549

Reply via email to