有沒有辦法在編譯時打印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