Allow generation of EMPLACE_TYPE
for variant if all oplists defined a FIELD operator.
This commit is contained in:
1 parent
afedb06dee
commit
2d4fc9dc97
3 files changed
+19
-3
No files matched your search
+15
-3
@@ -194,9 +194,10 @@
|
||||
typedef \
|
||||
M_IF_METHOD(GENTYPE, M_VAR1ANT_GET_OPLIST a)( M_GET_GENTYPE M_VAR1ANT_GET_OPLIST a, M_VAR1ANT_GET_TYPE a) \
|
||||
M_C4(m_var1ant_, name, _gentype_, num); \
|
||||
typedef const \
|
||||
M_IF_METHOD(GENTYPE, M_VAR1ANT_GET_OPLIST a)( M_GET_GENTYPE M_VAR1ANT_GET_OPLIST a, M_VAR1ANT_GET_TYPE a) \
|
||||
M_C4(m_var1ant_, name, _const_gentype_, num);
|
||||
typedef \
|
||||
M_IF_METHOD(GENTYPE, M_VAR1ANT_GET_OPLIST a)( const M_GET_GENTYPE M_VAR1ANT_GET_OPLIST a, M_VAR1ANT_GET_TYPE a const) \
|
||||
M_C4(m_var1ant_, name, _const_gentype_, num); \
|
||||
typedef M_VAR1ANT_GET_TYPE a M_C4(m_var1ant_, name, _type_, M_VAR1ANT_GET_FIELD a);
|
||||
|
||||
#define M_VAR1ANT_DEFINE_UNION_ELE(name, a) \
|
||||
, M_C4(name, _, M_VAR1ANT_GET_FIELD a, _value)
|
||||
@@ -793,8 +794,19 @@ M_INLINE void \
|
||||
M_IF_METHOD_ALL(INIT_MOVE, __VA_ARGS__)(INIT_MOVE(M_F(name, _init_move)),), \
|
||||
M_IF_METHOD_ALL(INIT_MOVE, __VA_ARGS__)(MOVE(M_F(name, _move)),), \
|
||||
M_IF_METHOD_ALL(SWAP, __VA_ARGS__)(SWAP(M_F(name, _swap)),), \
|
||||
M_IF_METHOD_ALL(FIELD, __VA_ARGS__)(M_VAR1ANT_OPLIST_EMPLACE_TYPE(name, __VA_ARGS__),), \
|
||||
)
|
||||
|
||||
/* Expand to an EMPLACE_TYPE compatible with OPLIST definition
|
||||
(Use M_REDUCE2 which is already used by M_IF_METHOD_ALL)
|
||||
*/
|
||||
#define M_VAR1ANT_OPLIST_EMPLACE_TYPE(name, ...) EMPLACE_TYPE( LIST( \
|
||||
M_REDUCE2(M_VAR1ANT_OPLIST_EMPLACE_TYPE_EXPAND, M_ID, name, __VA_ARGS__) \
|
||||
))
|
||||
#define M_VAR1ANT_OPLIST_EMPLACE_TYPE_EXPAND(name, oplist) \
|
||||
( M_C(_, M_GET_FIELD oplist), M_C4(name, _init_set_, M_GET_FIELD oplist), \
|
||||
M_C4(m_var1ant_, name, _type_, M_GET_FIELD oplist) )
|
||||
|
||||
|
||||
/********************************** INTERNAL *********************************/
|
||||
|
||||
|
||||
Reference in new issue
Block a user