Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <type_traits>
- #define DEFINE_HAS_MEMBER_TYPE(member_type) \
- template<typename T, typename = std::void_t<>> \
- struct has_##member_type##_member_type : std::false_type { }; \
- template<typename T> \
- struct has_##member_type##_member_type<T, std::void_t<typename T::member_type>> : std::true_type { }; \
- template<typename T> \
- constexpr bool has_##member_type##_member_type_v = has_##member_type##_member_type<T>::value;
- DEFINE_HAS_MEMBER_TYPE(self)
- struct Bad {};
- struct Good {
- using self = Good;
- };
- static_assert(!has_self_member_type<Bad>::value);
- static_assert(has_self_member_type_v<Good>);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement