Advertisement
Radfler

DEFINE_HAS_MEMBER_TYPE (macro, +tests)

Mar 12th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.61 KB | None | 0 0
  1. #include <type_traits>
  2.  
  3. #define DEFINE_HAS_MEMBER_TYPE(member_type) \
  4. template<typename T, typename = std::void_t<>> \
  5. struct has_##member_type##_member_type : std::false_type { }; \
  6. template<typename T> \
  7. struct has_##member_type##_member_type<T, std::void_t<typename T::member_type>> : std::true_type { }; \
  8. template<typename T> \
  9. constexpr bool has_##member_type##_member_type_v = has_##member_type##_member_type<T>::value;
  10.  
  11. DEFINE_HAS_MEMBER_TYPE(self)
  12.  
  13. struct Bad {};
  14. struct Good {
  15.     using self = Good;
  16. };
  17.  
  18. static_assert(!has_self_member_type<Bad>::value);
  19. static_assert(has_self_member_type_v<Good>);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement