HasMemberGeneratorMacros.hpp File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define OPM_GENERATE_HAS_MEMBER(MEMBER_NAME, ...)
 This macro generates a class HasMember_${MEMBER_NAME} which can be used for template specialization. More...
 

Detailed Description

This macro generates a class HasMember_${MEMBER_NAME} which can be used for template specialization.

e.g. if OPM_GENERATE_HAS_MEMBER(foo, int(), int(), int()) has been used, HasMember_foo<T>::value is true (if and only if) t.foo(int(), int(), int()) is a valid expression for an object t of the class T.

Macro Definition Documentation

◆ OPM_GENERATE_HAS_MEMBER

#define OPM_GENERATE_HAS_MEMBER (   MEMBER_NAME,
  ... 
)
Value:
template <class T, class T2> \
struct HasMember_##MEMBER_NAME##_Helper \
{ \
static constexpr bool value = false; \
}; \
\
template <class T> \
struct HasMember_##MEMBER_NAME##_Helper<T, \
typename ::Opm::AlwaysVoid<decltype(std::declval<T>().MEMBER_NAME(__VA_ARGS__))>::type> \
{ \
static constexpr bool value = true; \
}; \
\
template<typename T> \
struct HasMember_##MEMBER_NAME \
{ \
static constexpr bool value = HasMember_##MEMBER_NAME##_Helper<T, void>::value; \
};

This macro generates a class HasMember_${MEMBER_NAME} which can be used for template specialization.

e.g. if OPM_GENERATE_HAS_MEMBER(foo, int(), int(), int()) has been used, HasMember_foo<T>::value is true (if and only if) t.foo(int(), int(), int()) is a valid expression for an object t of the class T.