
Tobias Schwinger wrote:
a preliminary patch to work around it (see attached file).
^^^^^^^^^^^^^^^^^^^^^^^^ Just noticed it doesn't work because it causes name conflicts in some places (I should've run the whole test-suite...). The one attached this time does, however. Sorry! Tobias Index: boost/type_traits/detail/cv_traits_impl.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/type_traits/detail/cv_traits_impl.hpp,v retrieving revision 1.3 diff -u -r1.3 cv_traits_impl.hpp --- boost/type_traits/detail/cv_traits_impl.hpp 3 Dec 2003 13:32:56 -0000 1.3 +++ boost/type_traits/detail/cv_traits_impl.hpp 20 Jun 2005 20:17:04 -0000 @@ -12,13 +12,22 @@ #define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED #include "boost/config.hpp" +#include "boost/detail/workaround.hpp" #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +// implementation helper: + + +#if !(BOOST_WORKAROUND(__GNUC__,== 3) && (__GNUC_MINOR__ <= 2)) namespace boost { namespace detail { - -// implementation helper: +#else +#include "boost/type_traits/detail/yes_no_type.hpp" +namespace boost { +namespace type_traits { +namespace gcc8503 { +#endif template <typename T> struct cv_traits_imp {}; @@ -54,6 +63,32 @@ typedef T unqualified_type; }; +#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2) +// We have to exclude function pointers +// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503) +yes_type mini_funcptr_tester(...); +no_type mini_funcptr_tester(const volatile void*); + +} // namespace gcc8503 +} // namespace type_traits + +namespace detail { + +// Use the implementation above for non function pointers +template <typename T, unsigned Select + = (unsigned)sizeof(::boost::type_traits::gcc8503::mini_funcptr_tester((T)0)) > +struct cv_traits_imp : ::boost::type_traits::gcc8503::cv_traits_imp<T> { }; + +// Functions are never cv-qualified +template <typename T> struct cv_traits_imp<T*,1> +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; + +#endif + } // namespace detail } // namespace boost