Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

57 řádky
1.4 KiB

  1. #pragma once
  2. #include <type_traits>
  3. #include <cpputils/mp/core/const.h>
  4. namespace utl {
  5. namespace mp {
  6. namespace __impl /* forward declaration */
  7. {
  8. template<typename...>
  9. struct is_valid_impl;
  10. }
  11. template<typename T, typename S>
  12. using is_same = c_bool_t<std::is_same<T, S>::value>;
  13. template<typename Base, typename Derived>
  14. using is_base_of = c_bool_t<std::is_base_of<Base, Derived>::value>;
  15. template<typename... T>
  16. using is_constructible = c_bool_t<std::is_constructible<T...>::value>;
  17. template<typename... T>
  18. using is_empty = c_bool_t<std::is_empty<T...>::value>;
  19. template<typename... T>
  20. using is_final = c_bool_t<std::is_final<T...>::value>;
  21. template<typename T, typename U>
  22. using is_convertible = c_bool_t<std::is_convertible<T, U>::value>;
  23. template<typename T, typename U>
  24. using is_assignable = c_bool_t<std::is_assignable<T, U>::value>;
  25. template<typename... T>
  26. using is_valid = __impl::is_valid_impl<T...>;
  27. template<typename T>
  28. using is_arithmetic = c_bool_t<std::is_arithmetic<T>::value>;
  29. template<typename T>
  30. using is_signed = c_bool_t<std::is_signed<T>::value>;
  31. template<typename T>
  32. using is_unsigned = c_bool_t<std::is_unsigned<T>::value>;
  33. namespace __impl /* implementation */
  34. {
  35. template<typename...>
  36. struct is_valid_impl :
  37. public c_true_t
  38. { };
  39. }
  40. }
  41. }