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.

36 Zeilen
979 B

  1. #pragma once
  2. #include <utility>
  3. #include <cpputils/mp/core.h>
  4. namespace utl {
  5. namespace mp {
  6. namespace intern {
  7. template<typename T, typename U = T, typename = void>
  8. struct comparable_less
  9. : c_false_t
  10. { };
  11. template<typename T>
  12. struct comparable_less<T, T, void_t<
  13. decltype(std::forward<T>(std::declval<T>()) < std::forward<T>(std::declval<T>()) ? 0 : 0)>>
  14. : c_true_t
  15. { };
  16. template <typename T, typename U>
  17. struct comparable_less<T, U, enable_if_c<
  18. !is_same<T, U>::value,
  19. void_t<
  20. decltype(std::forward<T>(std::declval<T>()) < std::forward<U>(std::declval<U>()) ? 0 : 0),
  21. decltype(std::forward<U>(std::declval<U>()) < std::forward<T>(std::declval<T>()) ? 0 : 0),
  22. common_type<T, U>>>>
  23. : c_bool_t<
  24. comparable_less<T>::value &&
  25. comparable_less<U>::value &&
  26. comparable_less<common_type<T, U>>::value>
  27. { };
  28. }
  29. }
  30. }