Есть ли способ распечатать значение значения constexpr
или #define
d во время компиляции? Я хочу эквивалент std::cout <<
или какой-то способ сделать что-то вроде
constexpr int PI_INT = 4;
static_assert(PI_INT == 3,
const_str_join("PI_INT must be 3, not ", const_int_to_str(PI_INT)));
Изменить: Я могу выполнить некоторую базовую печать во время компиляции с constexpr
s, по крайней мере, на gcc, сделав что-то вроде
template <int v>
struct display_non_zero_int_value;
template <>
struct display_non_zero_int_value<0> { static constexpr bool foo = true; };
static constexpr int v = 1;
static_assert(v == 0 && display_non_zero_int_value<v>::foo, "v == 0");
что дает мне error: incomplete type ‘display_non_zero_int_value<1>’ used in nested name specifier static_assert(v == 0 && display_non_zero_int_value<v>::foo, "v == 0");
. (icpc, с другой стороны, менее полезен и просто говорит error: incomplete type is not allowed
) Есть ли способ написать макрос, который может обобщить это, чтобы я мог сделать что-то вроде
constexpr int PI_INT = 4;
PRINT_VALUE(PI_INT)
и получить сообщение об ошибке, которое связано с 4, каким-то образом?