23 #ifndef PLLL_INCLUDE_GUARD__HELPER_HPP
24 #define PLLL_INCLUDE_GUARD__HELPER_HPP
26 #include <plll/config.hpp>
52 namespace implementation
79 #if __cplusplus >= 201103L
80 #define PLLL_INTERNAL_STATIC_CHECK(condition, IdentifierWhichIsAMessage) \
81 static_assert(condition, #IdentifierWhichIsAMessage);
83 #define PLLL_INTERNAL_STATIC_CHECK(condition, IdentifierWhichIsAMessage) \
84 { plll::helper::implementation::CompileTimeError<((condition) != 0)> ERROR_##IdentifierWhichIsAMessage; (void)ERROR_##IdentifierWhichIsAMessage; }
87 namespace implementation
89 template<
bool cond,
typename A,
typename B>
96 template<
typename A,
typename B>
104 template<
bool cond,
typename A,
typename B>
124 typedef typename implementation::select_first_type_impl<cond, A, B>::result
result;
127 namespace implementation
129 template<
typename A,
typename B>
132 enum { result =
false };
138 enum { result =
true };
142 template<
typename A,
typename B>
159 namespace implementation
161 template<
bool cond,
typename T>
174 template<
bool cond,
typename Type =
void>
203 enum { value = val };
222 enum { value = val };
225 namespace implementation
251 #if __cplusplus >= 201103L
A result
The stripped type.
T & make_type_lvalue() PLLL_INTERNAL_NOTHROW_POSTFIX_ENFORCE
This is a pseudo-template which should only be used in expressions which are never evaluated...
A type comparison template.
Conversion from compile-time known ints to types.
Strips decorations const, &, volatile and && from types.
implementation::remove_decorations_impl< A >::result Result
The stripped type.
implementation::select_first_type_impl< cond, A, B >::result result
The result type. Either A or B, depending on the value of cond.
Allows to remove functions from overload resolution.
Conversion from compile-time known bools to types.
A type selector template.