Go to the documentation of this file. 26 #ifndef COMMON_VALID_EXPR_H 27 #define COMMON_VALID_EXPR_H 58 #define CHECK_VALID_EXPR_INT(TYPENAMES, TYPES, VALID, EXPR_TYPE, EXPR) \ 59 namespace CONCAT (check_valid_expr, __LINE__) { \ 61 template<typename, typename, typename = void> \ 62 struct is_valid_expression \ 63 : std::false_type {}; \ 65 template <TYPENAMES> \ 66 struct is_valid_expression<TYPES, gdb::void_t<decltype (EXPR)>> \ 67 : std::true_type {}; \ 69 static_assert (is_valid_expression<TYPES>::value == VALID, \ 72 template<TYPENAMES, typename = void> \ 74 : std::is_same<EXPR_TYPE, void> {}; \ 76 template <TYPENAMES> \ 77 struct is_same_type<TYPES, gdb::void_t<decltype (EXPR)>> \ 78 : std::is_same<EXPR_TYPE, decltype (EXPR)> {}; \ 80 static_assert (is_same_type<TYPES>::value, ""); \ 87 #define CHECK_VALID_EXPR_1(T1, VALID, EXPR_TYPE, EXPR) \ 88 CHECK_VALID_EXPR_INT (ESC (typename T1), \ 90 VALID, EXPR_TYPE, EXPR) 92 #define CHECK_VALID_EXPR_2(T1, T2, VALID, EXPR_TYPE, EXPR) \ 93 CHECK_VALID_EXPR_INT (ESC (typename T1, typename T2), \ 95 VALID, EXPR_TYPE, EXPR) 97 #define CHECK_VALID_EXPR_3(T1, T2, T3, VALID, EXPR_TYPE, EXPR) \ 98 CHECK_VALID_EXPR_INT (ESC (typename T1, typename T2, typename T3), \ 100 VALID, EXPR_TYPE, EXPR) 102 #define CHECK_VALID_EXPR_4(T1, T2, T3, T4, VALID, EXPR_TYPE, EXPR) \ 103 CHECK_VALID_EXPR_INT (ESC (typename T1, typename T2, \ 104 typename T3, typename T4), \ 105 ESC (T1, T2, T3, T4), \ 106 VALID, EXPR_TYPE, EXPR)