
Hi Boosters/John, GCC Bug 8503 ------------ during the Function Types review there was a report about GCC 3.2 warnings "volatile qualified function" (remove_cv on a function). It seems it's http://gcc.gnu.org/bugzilla/show_bug.cgi?8503. According to the GCC-Bugzilla, John's watching it - probably even the reporter. However, it seems it's currently not addressed by TypeTraits, so I wrote a preliminary patch to work around it (see attached file). Thanks to Jody Hadins for helping tracking it. is_aggregate == "is_class_or_union" ------------------------------------ Not that I currently need it -- but shouldn't there be a public one like this, at least for completeness ? Btw. great new documentation! Regards, 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 19 Jun 2005 15:06:19 -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) && BOOST_WORKAROUND(__GNUC_MINOR__,<= 2) +#include "boost/type_traits/detail/yes_no_type.hpp" namespace boost { namespace detail { - -// implementation helper: +namespace type_traits { +#else +namespace boost { +namespace detail { +#endif template <typename T> struct cv_traits_imp {}; @@ -54,6 +63,29 @@ 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) +::boost::type_traits::yes_type mini_funcptr_tester(...); +::boost::type_traits::no_type mini_funcptr_tester(const volatile void*); + +} // namespace type_traits + +// Use the implementation above for non function pointers +template <typename T, unsigned Select + = (unsigned)sizeof(boost::detail::type_traits::mini_funcptr_tester((T)0)) > +struct cv_traits_imp : boost::detail::type_traits::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