source: XIOS/dev/dev_olga/src/extern/boost/include/boost/type_traits/detail/cv_traits_impl.hpp @ 1022

Last change on this file since 1022 was 1022, checked in by mhnguyen, 7 years ago
File size: 2.6 KB
Line 
1
2//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
3//  Hinnant & John Maddock 2000. 
4//  Use, modification and distribution are subject to the Boost Software License,
5//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6//  http://www.boost.org/LICENSE_1_0.txt).
7//
8//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
9
10
11#ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
12#define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
13
14#include <boost/config.hpp>
15#include <boost/detail/workaround.hpp>
16
17#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
18
19// implementation helper:
20
21
22#if !(BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2))
23namespace boost {
24namespace detail {
25#else
26#include <boost/type_traits/detail/yes_no_type.hpp>
27namespace boost {
28namespace type_traits {
29namespace gcc8503 {
30#endif
31
32template <typename T> struct cv_traits_imp {};
33
34template <typename T>
35struct cv_traits_imp<T*>
36{
37    BOOST_STATIC_CONSTANT(bool, is_const = false);
38    BOOST_STATIC_CONSTANT(bool, is_volatile = false);
39    typedef T unqualified_type;
40};
41
42template <typename T>
43struct cv_traits_imp<const T*>
44{
45    BOOST_STATIC_CONSTANT(bool, is_const = true);
46    BOOST_STATIC_CONSTANT(bool, is_volatile = false);
47    typedef T unqualified_type;
48};
49
50template <typename T>
51struct cv_traits_imp<volatile T*>
52{
53    BOOST_STATIC_CONSTANT(bool, is_const = false);
54    BOOST_STATIC_CONSTANT(bool, is_volatile = true);
55    typedef T unqualified_type;
56};
57
58template <typename T>
59struct cv_traits_imp<const volatile T*>
60{
61    BOOST_STATIC_CONSTANT(bool, is_const = true);
62    BOOST_STATIC_CONSTANT(bool, is_volatile = true);
63    typedef T unqualified_type;
64};
65
66#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)
67// We have to exclude function pointers
68// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503)
69yes_type mini_funcptr_tester(...);
70no_type  mini_funcptr_tester(const volatile void*);
71
72} // namespace gcc8503
73} // namespace type_traits
74
75namespace detail {
76
77// Use the implementation above for non function pointers
78template <typename T, unsigned Select
79  = (unsigned)sizeof(::boost::type_traits::gcc8503::mini_funcptr_tester((T)0)) >
80struct cv_traits_imp : ::boost::type_traits::gcc8503::cv_traits_imp<T> { };
81
82// Functions are never cv-qualified
83template <typename T> struct cv_traits_imp<T*,1>
84{
85    BOOST_STATIC_CONSTANT(bool, is_const = false);
86    BOOST_STATIC_CONSTANT(bool, is_volatile = false);
87    typedef T unqualified_type;
88};
89
90#endif
91
92} // namespace detail
93} // namespace boost
94
95#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
96
97#endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
Note: See TracBrowser for help on using the repository browser.