Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

51 Zeilen
1.2 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<std::is_same<T, S>::value>;
  13. template<typename Base, typename Derived>
  14. using is_base_of = c_bool<std::is_base_of<Base, Derived>::value>;
  15. template<typename... T>
  16. using is_constructible = c_bool<std::is_constructible<T...>::value>;
  17. template<typename... T>
  18. using is_empty = c_bool<std::is_empty<T...>::value>;
  19. template<typename... T>
  20. using is_final = c_bool<std::is_final<T...>::value>;
  21. template<typename T, typename U>
  22. using is_convertible = c_bool<std::is_convertible<T, U>::value>;
  23. template<typename T, typename U>
  24. using is_assignable = c_bool<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<std::is_arithmetic<T>::value>;
  29. namespace __impl /* implementation */
  30. {
  31. template<typename...>
  32. struct is_valid_impl :
  33. public c_true
  34. { };
  35. }
  36. }
  37. }