2 (c) 2015 Glen Joseph Fernandes
3 <glenjofe -at- gmail.com>
5 Distributed under the Boost Software
7 http://boost.org/LICENSE_1_0.txt
9 #ifndef BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
10 #define BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
12 #include <boost/config.hpp>
14 #if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
15 #include <type_traits>
24 #if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
25 using std::remove_reference;
26 using std::remove_all_extents;
30 struct remove_reference {
35 struct remove_reference<T&> {
39 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
41 struct remove_reference<T&&> {
47 struct remove_all_extents {
52 struct remove_all_extents<T[]>
53 : remove_all_extents<T> { };
55 template<class T, std::size_t N>
56 struct remove_all_extents<T[N]>
57 : remove_all_extents<T> { };
65 struct remove_const<const T> {
70 struct remove_volatile {
75 struct remove_volatile<volatile T> {
81 : remove_volatile<typename remove_const<T>::type> { };
86 : remove_cv<typename remove_all_extents<typename
87 remove_reference<T>::type>::type> { };