You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

50 lines
996 B

  1. #pragma once
  2. #include <cppmp/config.h>
  3. #include "generic_predicate.h"
  4. namespace cppmp
  5. {
  6. /* tags */
  7. struct tag_getter { };
  8. struct tag_getter_member_var { };
  9. struct tag_getter_member_func { };
  10. struct tag_getter_lambda { };
  11. struct tag_getter_chain { };
  12. namespace __impl
  13. {
  14. /* getter_builder */
  15. template<typename X, typename = void>
  16. struct getter_builder;
  17. }
  18. /**
  19. * @brief Evaluates to true_t if the passed type is an getter, to false_t otherwise.
  20. */
  21. template<typename T>
  22. struct is_getter;
  23. #ifdef cppmp_supports_variable_templates
  24. /**
  25. * @brief Is true if the passed type is an getter, false otherwise.
  26. */
  27. template<typename T>
  28. constexpr decltype(auto) is_getter_v = is_getter<T>::value;
  29. #endif
  30. /**
  31. * @brief Predicate to create new getter objects.
  32. */
  33. constexpr decltype(auto) make_getter = generic_predicate<__impl::getter_builder> { };
  34. }
  35. #include "getter.inl"