有没有办法在编译时打印constexpr
或#define
d值的值?我想的std::cout <<
相当于或某种方式做这样的事情在编译时std :: cout等效,或static_assert编译时常量值在C++中的字符串化11
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)));
编辑:我可以做这样的事情
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");
做一些基本的编译时间
constexpr
■打印,至少在海湾合作委员会
它给我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,不知何故?
没有发布这个答案,因为我没有证据可交,但我记得在过去尝试这样做,我认为标准说static_assert必须接受一个字符串字面值,因此你可以不要使用constexpr表达式。抱歉。 – je4d
请注意,您的修复程序根本不使用'static_assert'。它只是重新构建了一个只会通过或失败的构造的基本思想。 “印刷”也不得不执行测试,所以你坚持用SFINAE来解决整个问题。 – Potatoswatter