|
Boost : |
From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2005-06-19 11:19:58
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
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk