[詳解]
15 #ifndef INCG_IRIS_IUTEST_PRAGMA_HPP_FBC5A1DE_3D0C_443E_84B1_5F0618DF9A6B_
16 #define INCG_IRIS_IUTEST_PRAGMA_HPP_FBC5A1DE_3D0C_443E_84B1_5F0618DF9A6B_
22 #if defined(__clang__)
23 # define IUTEST_PRAGMA(x) _Pragma(#x)
24 #elif defined(__GNUC__)
25 # define IUTEST_PRAGMA(x) _Pragma(#x)
26 #elif defined(_MSC_VER) && _MSC_VER >= 1310
27 # define IUTEST_PRAGMA(x) __pragma(x)
29 # define IUTEST_PRAGMA(x)
32 #define IUTEST_PRAGMA_MESSAGE(m) IUTEST_PRAGMA(message (m))
36 # define IUTEST_PRAGMA_MSC_WARN_PUSH() IUTEST_PRAGMA(warning (push))
37 # define IUTEST_PRAGMA_MSC_WARN_DISABLE(x) IUTEST_PRAGMA(warning (disable: x))
38 # define IUTEST_PRAGMA_MSC_WARN_SUPPRESS(x) IUTEST_PRAGMA(warning (suppress: x))
39 # define IUTEST_PRAGMA_MSC_WARN_POP() IUTEST_PRAGMA(warning (pop))
42 #ifndef IUTEST_PRAGMA_MSC_WARN_PUSH
43 # define IUTEST_PRAGMA_MSC_WARN_PUSH()
45 #ifndef IUTEST_PRAGMA_MSC_WARN_DISABLE
46 # define IUTEST_PRAGMA_MSC_WARN_DISABLE(x)
48 #ifndef IUTEST_PRAGMA_MSC_WARN_POP
49 # define IUTEST_PRAGMA_MSC_WARN_POP()
52 #if defined(__clang__)
53 # define IUTEST_PRAGMA_CLANG_WARN_PUSH() IUTEST_PRAGMA(clang diagnostic push)
54 # define IUTEST_PRAGMA_CLANG_WARN_DISABLE(x) IUTEST_PRAGMA(clang diagnostic ignored x)
55 # define IUTEST_PRAGMA_CLANG_WARN_POP() IUTEST_PRAGMA(clang diagnostic pop)
56 # define IUTEST_PRAGMA_GCC_WARN_PUSH IUTEST_PRAGMA_CLANG_WARN_PUSH
57 # define IUTEST_PRAGMA_GCC_WARN_DISABLE IUTEST_PRAGMA_CLANG_WARN_DISABLE
58 # define IUTEST_PRAGMA_GCC_WARN_POP IUTEST_PRAGMA_CLANG_WARN_POP
62 # if ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
63 # define IUTEST_PRAGMA_GCC_WARN_PUSH() IUTEST_PRAGMA(GCC diagnostic push)
64 # define IUTEST_PRAGMA_GCC_WARN_DISABLE(x) IUTEST_PRAGMA(GCC diagnostic ignored x)
65 # define IUTEST_PRAGMA_GCC_WARN_POP() IUTEST_PRAGMA(GCC diagnostic pop)
66 # define IUTEST_PRAGMA_CLANG_WARN_PUSH IUTEST_PRAGMA_GCC_WARN_PUSH
67 # define IUTEST_PRAGMA_CLANG_WARN_DISABLE IUTEST_PRAGMA_GCC_WARN_DISABLE
68 # define IUTEST_PRAGMA_CLANG_WARN_POP IUTEST_PRAGMA_GCC_WARN_POP
72 #ifndef IUTEST_PRAGMA_CLANG_WARN_PUSH
73 # define IUTEST_PRAGMA_CLANG_WARN_PUSH()
75 #ifndef IUTEST_PRAGMA_CLANG_WARN_DISABLE
76 # define IUTEST_PRAGMA_CLANG_WARN_DISABLE(x)
78 #ifndef IUTEST_PRAGMA_CLANG_WARN_POP
79 # define IUTEST_PRAGMA_CLANG_WARN_POP()
82 #ifndef IUTEST_PRAGMA_GCC_WARN_PUSH
83 # define IUTEST_PRAGMA_GCC_WARN_PUSH()
85 #ifndef IUTEST_PRAGMA_GCC_WARN_DISABLE
86 # define IUTEST_PRAGMA_GCC_WARN_DISABLE(x)
88 #ifndef IUTEST_PRAGMA_GCC_WARN_POP
89 # define IUTEST_PRAGMA_GCC_WARN_POP()
92 #if defined(__clang__)
93 # define IUTEST_PRAGMA_WARN_PUSH() IUTEST_PRAGMA_CLANG_WARN_PUSH()
94 # define IUTEST_PRAGMA_WARN_POP() IUTEST_PRAGMA_CLANG_WARN_PUSH()
95 # define IUTEST_PRAGMA_WARN_DISABLE(x) IUTEST_PRAGMA_CLANG_WARN_DISABLE(x)
96 #elif defined(__GNUC__)
97 # define IUTEST_PRAGMA_WARN_PUSH() IUTEST_PRAGMA_GCC_WARN_PUSH()
98 # define IUTEST_PRAGMA_WARN_POP() IUTEST_PRAGMA_GCC_WARN_POP()
99 # define IUTEST_PRAGMA_WARN_DISABLE(x) IUTEST_PRAGMA_GCC_WARN_DISABLE(x)
100 #elif defined(_MSC_VER)
101 # define IUTEST_PRAGMA_WARN_PUSH() IUTEST_PRAGMA_MSC_WARN_PUSH()
102 # define IUTEST_PRAGMA_WARN_POP() IUTEST_PRAGMA_MSC_WARN_POP()
103 # define IUTEST_PRAGMA_WARN_DISABLE(x)
105 # define IUTEST_PRAGMA_WARN_PUSH()
106 # define IUTEST_PRAGMA_WARN_POP()
107 # define IUTEST_PRAGMA_WARN_DISABLE(x)
112 #if defined(_MSC_VER) && defined(__STDC_WANT_SECURE_LIB__) && __STDC_WANT_SECURE_LIB__
113 # if defined(__clang__)
114 # define IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_BEGIN() IUTEST_PRAGMA_CLANG_WARN_PUSH() \
115 IUTEST_PRAGMA_CLANG_WARN_DISABLE("-Wdeprecated-declarations")
116 # define IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_END() IUTEST_PRAGMA_CLANG_WARN_POP()
118 # define IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_BEGIN() IUTEST_PRAGMA_MSC_WARN_PUSH() \
119 IUTEST_PRAGMA_MSC_WARN_DISABLE(4996)
120 # define IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_END() IUTEST_PRAGMA_MSC_WARN_POP()
123 # define IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_BEGIN()
124 # define IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_END()
127 #if defined(__clang__) || defined(__GNUC__)
128 # define IUTEST_PRAGMA_UNUSED_LOCAL_TYPEDEFS_WARN_DISABLE_BEGIN() \
129 IUTEST_PRAGMA_WARN_PUSH() \
130 IUTEST_PRAGMA_WARN_DISABLE("-Wunused-local-typedefs")
131 # define IUTEST_PRAGMA_UNUSED_LOCAL_TYPEDEFS_WARN_DISABLE_END() \
132 IUTEST_PRAGMA_WARN_POP()
134 # define IUTEST_PRAGMA_UNUSED_LOCAL_TYPEDEFS_WARN_DISABLE_BEGIN()
135 # define IUTEST_PRAGMA_UNUSED_LOCAL_TYPEDEFS_WARN_DISABLE_END()
138 #if defined(_MSC_VER)
139 # define IUTEST_PRAGMA_UNREACHCODE_WARN_DISABLE_BEGIN() IUTEST_PRAGMA_MSC_WARN_PUSH() \
140 IUTEST_PRAGMA_MSC_WARN_DISABLE(4702)
141 # define IUTEST_PRAGMA_UNREACHCODE_WARN_DISABLE_END() IUTEST_PRAGMA_MSC_WARN_POP()
143 # define IUTEST_PRAGMA_UNREACHCODE_WARN_DISABLE_BEGIN()
144 # define IUTEST_PRAGMA_UNREACHCODE_WARN_DISABLE_END()
147 #if defined(_MSC_VER) && _MSC_VER < 1700
148 # define IUTEST_PRAGMA_EXTERN_TEMPLATE_WARN_DISABLE_BEGIN() IUTEST_PRAGMA_MSC_WARN_PUSH() \
149 IUTEST_PRAGMA_MSC_WARN_DISABLE(4231)
150 # define IUTEST_PRAGMA_EXTERN_TEMPLATE_WARN_DISABLE_END() IUTEST_PRAGMA_MSC_WARN_POP()
152 # define IUTEST_PRAGMA_EXTERN_TEMPLATE_WARN_DISABLE_BEGIN()
153 # define IUTEST_PRAGMA_EXTERN_TEMPLATE_WARN_DISABLE_END()
156 #if defined(_MSC_VER) && _MSC_VER < 1900
157 # define IUTEST_PRAGMA_ASSIGNMENT_OPERATOR_COULD_NOT_GENERATE_WARN_DISABLE_BEGIN() IUTEST_PRAGMA_MSC_WARN_PUSH() \
158 IUTEST_PRAGMA_MSC_WARN_DISABLE(4512)
159 # define IUTEST_PRAGMA_ASSIGNMENT_OPERATOR_COULD_NOT_GENERATE_WARN_DISABLE_END() IUTEST_PRAGMA_MSC_WARN_POP()
161 # define IUTEST_PRAGMA_ASSIGNMENT_OPERATOR_COULD_NOT_GENERATE_WARN_DISABLE_BEGIN()
162 # define IUTEST_PRAGMA_ASSIGNMENT_OPERATOR_COULD_NOT_GENERATE_WARN_DISABLE_END()
165 #if defined(_MSC_VER) && IUTEST_HAS_CONSTEXPR
166 # define IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_BEGIN() IUTEST_PRAGMA_MSC_WARN_PUSH() \
167 IUTEST_PRAGMA_MSC_WARN_DISABLE(4592)
168 # define IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_END() IUTEST_PRAGMA_MSC_WARN_POP()
170 # define IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_BEGIN()
171 # define IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_END()
174 #if !defined(IUTEST_PRAGMA_WARN_DISABLE_SIGN_COMPARE)
175 # if defined(__clang__)
176 # define IUTEST_PRAGMA_WARN_DISABLE_SIGN_COMPARE() IUTEST_PRAGMA_CLANG_WARN_DISABLE("-Wsign-compare")
177 # elif defined(__GNUC__)
178 # define IUTEST_PRAGMA_WARN_DISABLE_SIGN_COMPARE() IUTEST_PRAGMA_GCC_WARN_DISABLE("-Wsign-compare")
179 # elif defined(_MSC_VER)
180 # define IUTEST_PRAGMA_WARN_DISABLE_SIGN_COMPARE() IUTEST_PRAGMA_MSC_WARN_DISABLE(4389 4018)
182 # define IUTEST_PRAGMA_WARN_DISABLE_SIGN_COMPARE()
186 #if !defined(IUTEST_PRAGMA_WARN_DISABLE_EMPTY_BODY)
187 # if defined(__clang__)
188 # define IUTEST_PRAGMA_WARN_DISABLE_EMPTY_BODY() IUTEST_PRAGMA_CLANG_WARN_DISABLE("-Wempty-body")
189 # elif defined(__GNUC__)
190 # define IUTEST_PRAGMA_WARN_DISABLE_EMPTY_BODY() IUTEST_PRAGMA_GCC_WARN_DISABLE("-Wempty-body")
191 # elif defined(_MSC_VER)
192 # define IUTEST_PRAGMA_WARN_DISABLE_EMPTY_BODY() IUTEST_PRAGMA_MSC_WARN_DISABLE(4390)
194 # define IUTEST_PRAGMA_WARN_DISABLE_EMPTY_BODY()
198 #if !defined(IUTEST_PRAGMA_WARN_FLOAT_EQUAL)
199 # if defined(__clang__)
200 # define IUTEST_PRAGMA_WARN_FLOAT_EQUAL() IUTEST_PRAGMA_CLANG_WARN_DISABLE("-Wfloat-equal")
201 # elif defined(__GNUC__)
202 # define IUTEST_PRAGMA_WARN_FLOAT_EQUAL() IUTEST_PRAGMA_GCC_WARN_DISABLE("-Wfloat-equal")
203 # elif defined(_MSC_VER)
204 # define IUTEST_PRAGMA_WARN_FLOAT_EQUAL() // IUTEST_PRAGMA_MSC_WARN_DISABLE(?)
206 # define IUTEST_PRAGMA_WARN_FLOAT_EQUAL()
210 #if !defined(IUTEST_PRAGMA_WARN_FORMAT_NONLITERAL)
211 # if defined(__clang__)
212 # define IUTEST_PRAGMA_WARN_FORMAT_NONLITERAL() IUTEST_PRAGMA_CLANG_WARN_DISABLE("-Wformat-nonliteral")
213 # elif defined(__GNUC__)
214 # define IUTEST_PRAGMA_WARN_FORMAT_NONLITERAL() IUTEST_PRAGMA_GCC_WARN_DISABLE("-Wformat-nonliteral")
215 # elif defined(_MSC_VER)
216 # define IUTEST_PRAGMA_WARN_FORMAT_NONLITERAL() // IUTEST_PRAGMA_MSC_WARN_DISABLE(?)
218 # define IUTEST_PRAGMA_WARN_FORMAT_NONLITERAL()
222 #if !defined(IUTEST_PRAGMA_WARN_CAST_ALIGN)
223 # if defined(__clang__)
224 # define IUTEST_PRAGMA_WARN_CAST_ALIGN() IUTEST_PRAGMA_CLANG_WARN_DISABLE("-Wcast-align")
225 # elif defined(__GNUC__)
226 # define IUTEST_PRAGMA_WARN_CAST_ALIGN() IUTEST_PRAGMA_GCC_WARN_DISABLE("-Wcast-align")
227 # elif defined(_MSC_VER)
228 # define IUTEST_PRAGMA_WARN_CAST_ALIGN() // IUTEST_PRAGMA_MSC_WARN_DISABLE(?)
230 # define IUTEST_PRAGMA_WARN_CAST_ALIGN()
234 #if !defined(IUTEST_PRAGMA_WARN_CXX14_CONSTEXPR_NOT_IMPLY_CONST)
235 # if defined(__clang__)
236 # define IUTEST_PRAGMA_WARN_CXX14_CONSTEXPR_NOT_IMPLY_CONST()
237 # elif defined(__GNUC__)
238 # define IUTEST_PRAGMA_WARN_CXX14_CONSTEXPR_NOT_IMPLY_CONST()
239 # elif defined(_MSC_VER)
240 # define IUTEST_PRAGMA_WARN_CXX14_CONSTEXPR_NOT_IMPLY_CONST() IUTEST_PRAGMA_MSC_WARN_DISABLE(4814)
242 # define IUTEST_PRAGMA_WARN_CXX14_CONSTEXPR_NOT_IMPLY_CONST()
246 #if !defined(IUTEST_PRAGMA_WARN_DISABLE_DANGLING_ELSE)
247 # if defined(__clang__)
248 # if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ > 0))
249 # define IUTEST_PRAGMA_WARN_DISABLE_DANGLING_ELSE() IUTEST_PRAGMA_CLANG_WARN_DISABLE("-Wdangling-else")
251 # elif defined(__GNUC__)
253 # define IUTEST_PRAGMA_WARN_DISABLE_DANGLING_ELSE() IUTEST_PRAGMA_GCC_WARN_DISABLE("-Wdangling-else")
255 # elif defined(_MSC_VER)
256 # define IUTEST_PRAGMA_WARN_DISABLE_DANGLING_ELSE()
260 #if !defined(IUTEST_PRAGMA_WARN_DISABLE_DANGLING_ELSE)
261 # define IUTEST_PRAGMA_WARN_DISABLE_DANGLING_ELSE()
264 #if !defined(IUTEST_PRAGMA_WARN_DISABLE_NOEXCEPT_TPYE)
265 # if defined(__GNUC__) && (__GNUC__ > 6)
266 # define IUTEST_PRAGMA_WARN_DISABLE_NOEXCEPT_TPYE() IUTEST_PRAGMA_GCC_WARN_DISABLE("-Wnoexcept-type")
270 #if !defined(IUTEST_PRAGMA_WARN_DISABLE_NOEXCEPT_TPYE)
271 # define IUTEST_PRAGMA_WARN_DISABLE_NOEXCEPT_TPYE()
274 #endif // INCG_IRIS_IUTEST_PRAGMA_HPP_FBC5A1DE_3D0C_443E_84B1_5F0618DF9A6B_