15 #ifndef INCG_IRIS_IUTEST_STATIC_ASSERTION_HPP_53842FD6_9E5D_40A6_905D_EC6DEBE5ED6A_
16 #define INCG_IRIS_IUTEST_STATIC_ASSERTION_HPP_53842FD6_9E5D_40A6_905D_EC6DEBE5ED6A_
20 #if IUTEST_HAS_STATIC_ASSERT_TYPEEQ
29 template<
typename T1,
typename T2>
30 struct StaticAssertTypeEqHelper;
37 template<
typename T1,
typename T2>
40 return detail::StaticAssertTypeEqHelper<T1, T2>();
53 #define StaticAssertTypeEq detail::StaticAssertTypeEqHelper
62 #if IUTEST_HAS_STATIC_ASSERT
63 #if defined(_MSC_VER) || (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)))
64 # define IUTEST_STATIC_ASSERT_MSG(B, Msg) static_assert(B, "static_assert: " Msg)
66 # define IUTEST_STATIC_ASSERT_MSG(B, Msg) static_assert(B, Msg)
69 # define IIUT_STATIC_ASSERT_SIZECHECK(B) sizeof(::iutest::detail::static_assert_failure< (bool)(B) >)
70 # define IUTEST_STATIC_ASSERT_MSG(B, Msg) \
71 typedef ::iutest::detail::StaticAssertionTest< IIUT_STATIC_ASSERT_SIZECHECK(B) > \
72 IUTEST_PP_CAT(iutest_static_assert_typedef_, IUTEST_PP_COUNTER) IUTEST_ATTRIBUTE_UNUSED_
78 #ifdef IUTEST_STATIC_ASSERT_MSG
79 # ifdef IUTEST_NO_VARIADIC_MACROS
80 # define IUTEST_STATIC_ASSERT(B) IUTEST_STATIC_ASSERT_MSG((B), #B)
82 # define IUTEST_STATIC_ASSERT(...) IUTEST_STATIC_ASSERT_MSG((__VA_ARGS__), #__VA_ARGS__)
89 #ifndef IUTEST_STATIC_ASSERT_IF_EXISTS
90 # if IUTEST_HAS_IF_EXISTS
91 # define IUTEST_STATIC_ASSERT_IF_EXISTS(identifier, msg) \
92 IUTEST_STATIC_ASSERT_MSG( IUTEST_IF_EXISTS(identifier, true) IUTEST_IF_NOT_EXISTS(identifier, false), msg)
94 # define IUTEST_STATIC_ASSERT_IF_EXISTS(identifier, msg)
101 #ifndef IUTEST_STATIC_ASSERT_IF_NOT_EXISTS
102 # if IUTEST_HAS_IF_EXISTS
103 # define IUTEST_STATIC_ASSERT_IF_NOT_EXISTS(identifier, msg) \
104 IUTEST_STATIC_ASSERT_MSG(IUTEST_IF_NOT_EXISTS(identifier, true) IUTEST_IF_EXISTS(identifier, false), msg)
106 # define IUTEST_STATIC_ASSERT_IF_NOT_EXISTS(identifier, msg)
119 template<
typename T1,
typename T2>
120 struct StaticAssertTypeEqHelper;
122 #if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
127 template<
bool b>
struct static_assert_typeeq;
129 template<>
struct static_assert_typeeq<true> {
operator bool()
const {
return true; } };
134 template<
typename T1,
typename T2>
135 struct StaticAssertTypeEqHelper
136 :
public helper::static_assert_typeeq< iutest_type_traits::is_same<T1, T2>::value >
143 template<
bool b>
struct static_assert_failure;
145 template<>
struct static_assert_failure<true> {
enum { value = 1 }; };
148 template<
int x>
struct StaticAssertionTest {};
#define StaticAssertTypeEq
型アサーション
Definition: iutest_static_assertion.hpp:54
iutest root namespace
Definition: iutest_charcode.hpp:33