|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2003-08-28 12:24:28
For BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION:
I've updated boost/detail/iterator so that it responds to
BOOST_TT_BROKEN_COMPILER_SPEC, and issues an error asking the user to
invoke BOOST_TT_BROKEN_COMPILER_SPEC when iterator_traits is used on
pointer types for which there's no remove_pointer specialization.
Note that because of vc7's screwy error reporting where it shows
expanded typedefs, to get the message to show up in the diagnostic I
had to make a compromise: whereas in vc6 you get an error only if you
try to use the broken parts of iterator_traits (value_type and
reference are incomplete types), in vc7 you get an error whenever you
try to instantiate iterator_traits<T*>. That means e.g., that you
can't access iterator_category on U* unless
BOOST_TT_BROKEN_COMPILER_SPEC has been invoked on U. This does have
an impact on real code, as several of the boost/lib/iterator/test
programs showed. You can see for yourself by grepping for "1300"
there.
The other possible option would have been to simply not give the user
a readable error message. I'm open to opinions that I chose the
wrong balance.
-- Dave Abrahams Boost Consulting www.boost-consulting.com -- Dave Abrahams Boost Consulting 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