34 #ifndef META_UTIL_H_INCLUDED
35 #define META_UTIL_H_INCLUDED
37 #include <Pb/compiler.h>
38 #include <type_traits>
64 template <
typename T >
94 template <
bool predicate,
typename T, T trueValue, T falseValue>
96 : std::integral_constant<T, trueValue>
102 template <
typename T, T trueValue, T falseValue>
104 : std::integral_constant<T, falseValue>
110 template <
bool Predicate>
112 : std::integral_constant<int, 1>
120 : std::integral_constant<int, 0>
150 template <
typename T>
152 : std::is_same<T, MT>
160 template <
typename T>
162 : std::integral_constant<bool, !T::value>
169 template <
typename T,
172 : std::integral_constant<bool, T::value && U::value>
179 template <
typename T,
182 : std::integral_constant<bool, T::value || U::value>
277 template <
typename T>
279 : std::integral_constant< bool,
280 std::is_base_of<packed_trait, T>::value>
286 template <
typename T>
287 struct type_container
288 : std::integral_constant<bool,
289 std::is_base_of<container_trait, T>::value>
295 struct type_container<MT>
296 : std::integral_constant<bool, false>
301 template <
typename T>
303 : std::integral_constant < bool,
304 type_container<T>::value && !packed_value<T>::value>
310 struct nested_value<MT>
311 : std::integral_constant<bool, false>
319 template<
typename T >
330 template<
typename T,
338 template <
typename T>
340 :
And < Or < std::is_base_of<vector_trait, T>,
343 Not < std::is_base_of<array_trait, T> >
349 struct vector_value<MT>
350 : std::integral_constant<bool, false>
357 template<
typename T >
365 template<
typename T,
374 template<
typename T>
376 :
And < Or < std::is_base_of<array_trait, T>,
379 Not < std::is_base_of<vector_trait, T> >
384 template <
typename T>
385 struct sequence_value
386 : std::integral_constant< bool,
387 Or< typename std::is_base_of<sequence_trait, T>,
397 struct sequence_value<MT>
398 : std::integral_constant<bool, false>
406 template<
typename T >
416 template<
typename A >
435 template<
typename T >
437 : std::integral_constant< bool, is_opaque<T>::value >