コンパイル時に aconstexpr
またはd 値の値を出力する方法はありますか? #define
に相当する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
少なくともgccでは、次のようなことを行うことで、sを使用して基本的なコンパイル時の印刷を行うことができます
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を含むエラーメッセージが表示されますか?