Main Page
Related Pages
Modules
Classes
All
Classes
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Groups
Pages
meta/alias.hpp
1
// The MIT License (MIT)
2
3
// Copyright (c) 2012-2014 Danny Y., Rapptz
4
5
// Permission is hereby granted, free of charge, to any person obtaining a copy of
6
// this software and associated documentation files (the "Software"), to deal in
7
// the Software without restriction, including without limitation the rights to
8
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
// the Software, and to permit persons to whom the Software is furnished to do so,
10
// subject to the following conditions:
11
12
// The above copyright notice and this permission notice shall be included in all
13
// copies or substantial portions of the Software.
14
15
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22
#ifndef GEARS_META_ALIAS_HPP
23
#define GEARS_META_ALIAS_HPP
24
25
#include "meta.hpp"
26
27
namespace
gears {
28
namespace
meta {
29
namespace
alias_detail {
30
enum class
enabler { _ };
31
}
// alias_detail
32
33
constexpr
auto
_ = alias_detail::enabler::_;
34
51
template
<
typename
... Args>
52
using
EnableIf
=
Type
<std::enable_if<
All
<Args...>::value, alias_detail::enabler>>;
53
58
template
<
typename
... Args>
59
using
DisableIf
=
Type
<std::enable_if<
meta::Not
<
All
<Args...>>::value, alias_detail::enabler>>;
60
65
template
<
typename
T>
66
using
Decay
=
Type<std::decay<T>
>;
67
72
template
<
typename
T>
73
using
RemoveRef
=
Type<std::remove_reference<T>
>;
74
79
template
<
typename
T>
80
using
RemoveCV
=
Type<std::remove_cv<T>
>;
81
86
template
<
typename
T>
87
using
RemoveConst
=
Type<std::remove_const<T>
>;
88
93
template
<
typename
T>
94
using
RemoveVolatile
=
Type<std::remove_volatile<T>
>;
95
100
template
<
typename
T>
101
using
RemoveExtents
=
Type<std::remove_all_extents<T>
>;
102
107
template
<
typename
T>
108
using
RemovePointer
=
Type<std::remove_pointer<T>
>;
109
114
template
<
typename
T>
115
using
AddLValueRef
=
Type<std::add_lvalue_reference<T>
>;
116
121
template
<
typename
T>
122
using
AddRValueRef
=
Type<std::add_rvalue_reference<T>
>;
123
128
template
<
typename
T>
129
using
AddCV
=
Type<std::add_cv<T>
>;
130
135
template
<
typename
T>
136
using
AddConst
=
Type<std::add_const<T>
>;
137
142
template
<
typename
T>
143
using
AddVolatile
=
Type<std::add_volatile<T>
>;
144
149
template
<
typename
T>
150
using
AddPointer
=
Type<std::add_pointer<T>
>;
151
156
template
<
typename
T>
157
using
MakeSigned
=
Type<std::make_signed<T>
>;
158
163
template
<
typename
T>
164
using
MakeUnsigned
=
Type<std::make_unsigned<T>
>;
165
170
template
<
typename
T>
171
using
Unqualified
=
RemoveCV<RemoveRef<T>
>;
172
177
template
<
typename
T>
178
using
ValueType
=
typename
Unqualified<T>::value_type
;
179
184
template
<
typename
T>
185
using
StorageFor
=
Type<std::aligned_storage<sizeof(T), std::alignment_of<T>::value
>>;
186
}
// meta
187
}
// gears
188
189
#endif // GEARS_META_ALIAS_HPP
Copyright © Danny Y. Documentation generated by
Doxygen