mimic++
v10.0.1
Toggle main menu visibility
Loading...
Searching...
No Matches
Common.hpp
Go to the documentation of this file.
1
// Copyright Dominic (DNKpp) Koepke 2024-2026.
2
// Distributed under the Boost Software License, Version 1.0.
3
// (See accompanying file LICENSE_1_0.txt or copy at
4
// https://www.boost.org/LICENSE_1_0.txt)
5
6
#ifndef MIMICPP_MACROS_COMMON_HPP
7
#define MIMICPP_MACROS_COMMON_HPP
8
9
#pragma once
10
11
namespace
mimicpp
12
{
18
24
}
25
32
#define MIMICPP_DETAIL_STRIP_PARENS(x) MIMICPP_DETAIL_STRIP_PARENS_OUTER(MIMICPP_DETAIL_STRIP_PARENS_INNER x)
33
38
#define MIMICPP_DETAIL_STRIP_PARENS_INNER(...) MIMICPP_DETAIL_STRIP_PARENS_INNER __VA_ARGS__
39
44
#define MIMICPP_DETAIL_STRIP_PARENS_OUTER(...) MIMICPP_DETAIL_STRIP_PARENS_OUTER_(__VA_ARGS__)
45
50
#define MIMICPP_DETAIL_STRIP_PARENS_OUTER_(...) MIMICPP_DETAIL_STRIP_PARENS_STRIPPED_##__VA_ARGS__
51
56
#define MIMICPP_DETAIL_STRIP_PARENS_STRIPPED_MIMICPP_DETAIL_STRIP_PARENS_INNER
57
58
namespace
mimicpp
59
{
70
}
71
76
#define MIMICPP_DETAIL_PARENS ()
77
82
#define MIMICPP_DETAIL_COMMA_DELIMITER() ,
83
88
#define MIMICPP_DETAIL_NO_DELIMITER()
89
94
#define MIMICPP_DETAIL_IDENTITY(...) __VA_ARGS__
95
100
#define MIMICPP_DETAIL_EXPAND(...) MIMICPP_DETAIL_EXPAND3(MIMICPP_DETAIL_EXPAND3(MIMICPP_DETAIL_EXPAND3(MIMICPP_DETAIL_EXPAND3(__VA_ARGS__))))
101
106
#define MIMICPP_DETAIL_EXPAND3(...) MIMICPP_DETAIL_EXPAND2(MIMICPP_DETAIL_EXPAND2(MIMICPP_DETAIL_EXPAND2(MIMICPP_DETAIL_EXPAND2(__VA_ARGS__))))
107
112
#define MIMICPP_DETAIL_EXPAND2(...) MIMICPP_DETAIL_EXPAND1(MIMICPP_DETAIL_EXPAND1(MIMICPP_DETAIL_EXPAND1(MIMICPP_DETAIL_EXPAND1(__VA_ARGS__))))
113
118
#define MIMICPP_DETAIL_EXPAND1(...) __VA_ARGS__
119
127
#define MIMICPP_DETAIL_FOR_EACH_EXT_INDIRECT(macro, sequence, ...) macro(sequence, __VA_ARGS__)
128
144
#define MIMICPP_DETAIL_FOR_EACH_EXT(macro, token, delimiter, projection_macro, bound, ...) \
145
__VA_OPT__(MIMICPP_DETAIL_EXPAND(MIMICPP_DETAIL_FOR_EACH_EXT_HELPER(macro, token, token, delimiter, projection_macro, bound, __VA_ARGS__)))
146
151
#define MIMICPP_DETAIL_FOR_EACH_EXT_HELPER(macro, token, sequence, delimiter, projection_macro, bound, a1, ...) \
152
MIMICPP_DETAIL_FOR_EACH_EXT_INDIRECT(macro, sequence, MIMICPP_DETAIL_STRIP_PARENS(bound), projection_macro(a1)) \
153
__VA_OPT__(delimiter() MIMICPP_FOR_EACH_EXT_AGAIN MIMICPP_DETAIL_PARENS(macro, token, sequence##token, delimiter, projection_macro, bound, __VA_ARGS__))
154
159
#define MIMICPP_FOR_EACH_EXT_AGAIN() MIMICPP_DETAIL_FOR_EACH_EXT_HELPER
160
161
namespace
mimicpp
162
{
168
}
169
174
#define MIMICPP_DETAIL_STRINGIFY_IMPL(...) #__VA_ARGS__
175
180
#define MIMICPP_DETAIL_STRINGIFY(...) MIMICPP_DETAIL_STRINGIFY_IMPL(__VA_ARGS__)
181
199
#ifndef MIMICPP_DETAIL_COUNTER
200
#if (!defined(__clang__) || __clang_major__ < 22)
201
#if defined(__COUNTER__) \
202
&& (__COUNTER__ + 1 == __COUNTER__ + 0)
203
#define MIMICPP_DETAIL_COUNTER __COUNTER__
204
#endif
205
#endif
206
207
#ifndef MIMICPP_DETAIL_COUNTER
208
#define MIMICPP_DETAIL_COUNTER __LINE__
209
#endif
210
#endif
211
212
#endif
mimicpp
Definition
Call.hpp:24
mimic++
macros
Common.hpp
Generated on
for mimic++ by
1.18.0