|
67 | 67 | BOOST_PP_REPEAT(BOOST_PP_TUPLE_SIZE(ARGS), yOMM2_ALIST, ARGS)); \
|
68 | 68 | }
|
69 | 69 |
|
70 |
| -#define YOMM2_DEFINE(NAME, ARGS, ...) \ |
| 70 | +#define YOMM2_DEFINE(NAME, ARGS, ...) \ |
71 | 71 | yOMM2_DEFINE(YOMM2_GENSYM, NAME, ARGS, __VA_ARGS__)
|
72 | 72 |
|
73 |
| -#define YOMM2_DEFINE_IN(CONTAINER, NAME, ARGS, ...) \ |
| 73 | +#define YOMM2_DEFINE_IN(CONTAINER, NAME, ARGS, ...) \ |
74 | 74 | yOMM2_DEFINE_IN_CONTAINER( \
|
75 | 75 | YOMM2_GENSYM, , CONTAINER, NAME, ARGS, __VA_ARGS__)
|
76 | 76 |
|
|
112 | 112 | #endif
|
113 | 113 |
|
114 | 114 | #define YOMM2_DECLARE_METHOD_CONTAINER_1(CONTAINER) \
|
115 |
| - template<typename S> \ |
| 115 | + template<typename> \ |
116 | 116 | struct CONTAINER
|
117 | 117 |
|
118 | 118 | #define YOMM2_DECLARE_METHOD_CONTAINER_4(CONTAINER, NAME, ARGS, ...) \
|
119 |
| - template<typename S> \ |
| 119 | + template<typename> \ |
120 | 120 | struct CONTAINER; \
|
121 | 121 | YOMM2_DECLARE_METHOD_CONTAINER_4_NS( \
|
122 | 122 | YOMM2_GENSYM, CONTAINER, NAME, ARGS, __VA_ARGS__)
|
123 | 123 |
|
124 | 124 | #define YOMM2_DECLARE_METHOD_CONTAINER_4_NS(NS, CONTAINER, NAME, ARGS, ...) \
|
125 |
| - template<typename S> \ |
| 125 | + template<typename> \ |
126 | 126 | struct CONTAINER; \
|
127 | 127 | namespace { \
|
128 | 128 | namespace NS { \
|
129 | 129 | yOMM2_SELECT_METHOD(NAME, ARGS); \
|
130 | 130 | } \
|
131 | 131 | } \
|
132 | 132 | template<> \
|
133 |
| - struct CONTAINER<YOMM2_SYMBOL(NAME) ARGS> { \ |
| 133 | + struct CONTAINER< \ |
| 134 | + boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> ARGS> { \ |
134 | 135 | static NS::_yOMM2_method::next_type next; \
|
135 | 136 | static boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> fn \
|
136 | 137 | ARGS; \
|
|
143 | 144 | #define yOMM2_DEFINE_IN_CONTAINER(NS, INLINE, CONTAINER, NAME, ARGS, ...) \
|
144 | 145 | YOMM2_DECLARE_METHOD_CONTAINER_4_NS( \
|
145 | 146 | NS, CONTAINER, NAME, ARGS, __VA_ARGS__); \
|
146 |
| - INLINE NS::_yOMM2_method::next_type \ |
147 |
| - CONTAINER<YOMM2_SYMBOL(NAME) ARGS>::next; \ |
| 147 | + INLINE NS::_yOMM2_method::next_type CONTAINER< \ |
| 148 | + boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>>(ARGS)>::next; \ |
148 | 149 | namespace { \
|
149 | 150 | namespace NS { \
|
150 |
| - INLINE _yOMM2_method::override_fn<CONTAINER<YOMM2_SYMBOL(NAME) ARGS>::fn> \ |
151 |
| - YOMM2_GENSYM(&CONTAINER<YOMM2_SYMBOL(NAME) ARGS>::next); \ |
| 151 | + INLINE _yOMM2_method::override_fn<CONTAINER< \ |
| 152 | + boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> ARGS>::fn> \ |
| 153 | + YOMM2_GENSYM( \ |
| 154 | + &CONTAINER<boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> \ |
| 155 | + ARGS>::next); \ |
152 | 156 | } \
|
153 | 157 | } \
|
154 | 158 | INLINE boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> \
|
155 |
| - CONTAINER<YOMM2_SYMBOL(NAME) ARGS>::fn ARGS |
| 159 | + CONTAINER<boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>>( \ |
| 160 | + ARGS)>::fn ARGS |
156 | 161 |
|
157 |
| -#if !BOOST_PP_VARIADICS_MSVC |
158 |
| -#define YOMM2_FRIEND(...) \ |
159 |
| - BOOST_PP_OVERLOAD(YOMM2_FRIEND_, __VA_ARGS__)(__VA_ARGS__) |
160 |
| -#else |
161 |
| -#define YOMM2_FRIEND(...) \ |
162 |
| - BOOST_PP_CAT( \ |
163 |
| - BOOST_PP_OVERLOAD(YOMM2_FRIEND_, __VA_ARGS__)(__VA_ARGS__), \ |
164 |
| - BOOST_PP_EMPTY()) |
165 |
| -#endif |
| 162 | +// #if !BOOST_PP_VARIADICS_MSVC |
| 163 | +// #define YOMM2_FRIEND(...) \ |
| 164 | +// BOOST_PP_OVERLOAD(YOMM2_FRIEND_, __VA_ARGS__)(__VA_ARGS__) |
| 165 | +// #else |
| 166 | +// #define YOMM2_FRIEND(...) \ |
| 167 | +// BOOST_PP_CAT( \ |
| 168 | +// BOOST_PP_OVERLOAD(YOMM2_FRIEND_, __VA_ARGS__)(__VA_ARGS__), \ |
| 169 | +// BOOST_PP_EMPTY()) |
| 170 | +// #endif |
166 | 171 |
|
167 |
| -#define YOMM2_FRIEND_1(CONTAINER) \ |
168 |
| - template<typename> \ |
169 |
| - friend struct CONTAINER |
| 172 | +// #define YOMM2_FRIEND_1(CONTAINER) \ |
| 173 | +// template<typename> \ |
| 174 | +// friend struct CONTAINER |
170 | 175 |
|
171 |
| -#define YOMM2_FRIEND_3(CONTAINER, NAME, ARGS) \ |
172 |
| - friend struct CONTAINER<YOMM2_SYMBOL(NAME) ARGS> |
| 176 | +// #define YOMM2_FRIEND_3(CONTAINER, ...) \ |
| 177 | +// friend struct CONTAINER<__VA_ARGS__> |
173 | 178 |
|
174 |
| -#define YOMM2_DEFINITION(CONTAINER, NAME, ARGS) \ |
175 |
| - CONTAINER<YOMM2_SYMBOL(NAME) ARGS>::fn |
| 179 | +// #define YOMM2_DEFINITION(CONTAINER, NAME, ARGS) \ |
| 180 | +// CONTAINER<YOMM2_SYMBOL(NAME) ARGS>::fn |
176 | 181 |
|
177 | 182 | #define YOMM2_CLASSES(...) \
|
178 | 183 | static ::yorel::yomm2::detail::use_classes_macro< \
|
|
187 | 192 | #define declare_method YOMM2_DECLARE
|
188 | 193 | #define declare_static_method YOMM2_STATIC_DECLARE
|
189 | 194 | #define define_method YOMM2_DEFINE
|
| 195 | +#define define_method_in YOMM2_DEFINE_IN |
190 | 196 | #define define_method_inline YOMM2_DEFINE_INLINE
|
191 | 197 | #define method_class YOMM2_METHOD_CLASS
|
192 | 198 |
|
|
0 commit comments