2 Copyright 2015 Glen Joseph Fernandes
5 Distributed under the Boost Software License, Version 1.0.
6 (http://www.boost.org/LICENSE_1_0.txt)
8 #ifndef BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
9 #define BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
11 #include <boost/config.hpp>
13 #if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
14 #include <type_traits>
23 #if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
24 using std::remove_reference;
25 using std::remove_all_extents;
29 struct remove_reference {
34 struct remove_reference<T&> {
38 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
40 struct remove_reference<T&&> {
46 struct remove_all_extents {
51 struct remove_all_extents<T[]> {
52 typedef typename remove_all_extents<T>::type type;
55 template<class T, std::size_t N>
56 struct remove_all_extents<T[N]> {
57 typedef typename remove_all_extents<T>::type type;
66 struct remove_cv<const T> {
71 struct remove_cv<volatile T> {
76 struct remove_cv<const volatile T> {
83 typedef typename remove_cv<typename remove_all_extents<typename
84 remove_reference<T>::type>::type>::type type;