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

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to