blob: 4421c5934c2bb7e58235d36cdc6a670002866673 [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
Jeff Thompson3d613fd2013-10-15 15:39:04 -07009#ifndef NDNBOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
10#define NDNBOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
Jeff Thompsonf7d49942013-08-01 16:47:40 -070011
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
Jeff Thompson3d613fd2013-10-15 15:39:04 -070016#if NDNBOOST_WORKAROUND(NDNBOOST_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
Jeff Thompson3d613fd2013-10-15 15:39:04 -070025#ifndef NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
Jeff Thompsonf7d49942013-08-01 16:47:40 -070026
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};
Jeff Thompson3d613fd2013-10-15 15:39:04 -070037#ifndef NDNBOOST_NO_CXX11_RVALUE_REFERENCES
Jeff Thompsonf7d49942013-08-01 16:47:40 -070038template <class T>
39struct remove_rvalue_ref<T&&>
40{
41 typedef T type;
42};
43#endif
44
45} // namespace detail
46
Jeff Thompson3d613fd2013-10-15 15:39:04 -070047NDNBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename ndnboost::detail::remove_rvalue_ref<T>::type)
48NDNBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T&,T)
Jeff Thompsonf7d49942013-08-01 16:47:40 -070049
Jeff Thompson3d613fd2013-10-15 15:39:04 -070050#if defined(NDNBOOST_ILLEGAL_CV_REFERENCES)
Jeff Thompsonf7d49942013-08-01 16:47:40 -070051// 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...
Jeff Thompson3d613fd2013-10-15 15:39:04 -070055NDNBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const,T)
56NDNBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& volatile,T)
57NDNBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const volatile,T)
Jeff Thompsonf7d49942013-08-01 16:47:40 -070058#endif
59
Jeff Thompson3d613fd2013-10-15 15:39:04 -070060#elif !NDNBOOST_WORKAROUND(NDNBOOST_MSVC,<=1300)
Jeff Thompsonf7d49942013-08-01 16:47:40 -070061
Jeff Thompson3d613fd2013-10-15 15:39:04 -070062NDNBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename ndnboost::detail::remove_reference_impl<T>::type)
Jeff Thompsonf7d49942013-08-01 16:47:40 -070063
Jeff Thompson3d613fd2013-10-15 15:39:04 -070064#endif // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
Jeff Thompsonf7d49942013-08-01 16:47:40 -070065
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
Jeff Thompson3d613fd2013-10-15 15:39:04 -070070#endif // NDNBOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED