91 lines
2.1 KiB
C++
91 lines
2.1 KiB
C++
|
/*
|
||
|
(c) 2014 Glen Joseph Fernandes
|
||
|
glenjofe at gmail dot com
|
||
|
|
||
|
Distributed under the Boost Software
|
||
|
License, Version 1.0.
|
||
|
http://boost.org/LICENSE_1_0.txt
|
||
|
*/
|
||
|
#ifndef BOOST_ALIGN_DETAIL_REMOVE_TRAITS_HPP
|
||
|
#define BOOST_ALIGN_DETAIL_REMOVE_TRAITS_HPP
|
||
|
|
||
|
#include <boost/config.hpp>
|
||
|
|
||
|
#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||
|
#include <type_traits>
|
||
|
#else
|
||
|
#include <cstddef>
|
||
|
#endif
|
||
|
|
||
|
namespace boost {
|
||
|
namespace alignment {
|
||
|
namespace detail {
|
||
|
#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||
|
using std::remove_reference;
|
||
|
using std::remove_all_extents;
|
||
|
using std::remove_cv;
|
||
|
#else
|
||
|
template<class T>
|
||
|
struct remove_reference {
|
||
|
typedef T type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_reference<T&> {
|
||
|
typedef T type;
|
||
|
};
|
||
|
|
||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||
|
template<class T>
|
||
|
struct remove_reference<T&&> {
|
||
|
typedef T type;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_all_extents {
|
||
|
typedef T type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_all_extents<T[]> {
|
||
|
typedef typename remove_all_extents<T>::type type;
|
||
|
};
|
||
|
|
||
|
template<class T, std::size_t N>
|
||
|
struct remove_all_extents<T[N]> {
|
||
|
typedef typename remove_all_extents<T>::type type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_const {
|
||
|
typedef T type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_const<const T> {
|
||
|
typedef T type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_volatile {
|
||
|
typedef T type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_volatile<volatile T> {
|
||
|
typedef T type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct remove_cv {
|
||
|
typedef typename remove_volatile<typename
|
||
|
remove_const<T>::type>::type type;
|
||
|
};
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|