blob: d84c6ac7d36265aa12a2d2d189cbf030b4bfaf41 [file] [log] [blame]
Jeff Thompsonf7d49942013-08-01 16:47:40 -07001
2// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
3// Use, modification and distribution are subject to the Boost Software License,
4// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt).
6//
7// See http://www.boost.org/libs/type_traits for most recent version including documentation.
8
9#ifndef BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
10#define BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
11
Jeff Thompson2277ce52013-08-01 17:34:11 -070012#include <ndnboost/type_traits/broken_compiler_spec.hpp>
13#include <ndnboost/config.hpp>
14#include <ndnboost/detail/workaround.hpp>
Jeff Thompsonf7d49942013-08-01 16:47:40 -070015
16#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
Jeff Thompson2277ce52013-08-01 17:34:11 -070017#include <ndnboost/type_traits/msvc/remove_reference.hpp>
Jeff Thompsonf7d49942013-08-01 16:47:40 -070018#endif
19
20// should be the last #include
Jeff Thompson2277ce52013-08-01 17:34:11 -070021#include <ndnboost/type_traits/detail/type_trait_def.hpp>
Jeff Thompsonf7d49942013-08-01 16:47:40 -070022
23namespace ndnboost {
24
25#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
26
27namespace detail{
28//
29// We can't filter out rvalue_references at the same level as
30// references or we get ambiguities from msvc:
31//
32template <class T>
33struct remove_rvalue_ref
34{
35 typedef T type;
36};
37#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
38template <class T>
39struct remove_rvalue_ref<T&&>
40{
41 typedef T type;
42};
43#endif
44
45} // namespace detail
46
47BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename ndnboost::detail::remove_rvalue_ref<T>::type)
48BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T&,T)
49
50#if defined(BOOST_ILLEGAL_CV_REFERENCES)
51// these are illegal specialisations; cv-qualifies applied to
52// references have no effect according to [8.3.2p1],
53// C++ Builder requires them though as it treats cv-qualified
54// references as distinct types...
55BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const,T)
56BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& volatile,T)
57BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const volatile,T)
58#endif
59
60#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
61
62BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename ndnboost::detail::remove_reference_impl<T>::type)
63
64#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
65
66} // namespace ndnboost
67
Jeff Thompson2277ce52013-08-01 17:34:11 -070068#include <ndnboost/type_traits/detail/type_trait_undef.hpp>
Jeff Thompsonf7d49942013-08-01 16:47:40 -070069
70#endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED