25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
1.0 KiB

  1. #pragma once
  2. #include <utility>
  3. #include <cpputils/mp/core/conditionals.h>
  4. #include <cpputils/mp/misc/tag_of.h>
  5. #include <cpputils/mp/operations/compare/equal.h>
  6. #include <cpputils/mp/operations/compare/not_equal.h>
  7. namespace utl {
  8. namespace mp {
  9. namespace intern {
  10. template<typename T>
  11. struct operators_comparable
  12. { static constexpr bool value = false; };
  13. }
  14. namespace operators
  15. {
  16. template<typename X, typename Y, typename = enable_if_c<
  17. intern::operators_comparable<tag_of<X>>::value &&
  18. intern::operators_comparable<tag_of<Y>>::value>>
  19. constexpr auto operator == (X&& x, Y&& y)
  20. { return equal(std::forward<X>(x), std::forward<Y>(y)); }
  21. template<typename X, typename Y, typename = enable_if_c<
  22. intern::operators_comparable<tag_of<X>>::value &&
  23. intern::operators_comparable<tag_of<Y>>::value>>
  24. constexpr auto operator != (X&& x, Y&& y)
  25. { return not_equal(std::forward<X>(x), std::forward<Y>(y)); }
  26. }
  27. }
  28. }