如何在错误消息使用std::cout
等语法的情况下引发编译时错误消息?
例如,
int main(void){
int i = 14;
int condition = 0;
if (condition == 0){
#error "no, " << i << " won't work.";
}
}
应该提供类似
的错误消息"test.cpp:5: error: no, 14 won't work."
在编译程序期间,就像g ++的#error
或c ++ 11的static_assert(false, "err_message");
一样。
在上面的例子中,变量i
“的值应该在实际运行程序之前知道......
我需要的实际地点是:
我有一个带有静态尺寸的多维数组。我想提出一个编译器时间错误,它也提到了多维数组的维度(例如3x4x5)。
我想要一个std::cout
类似于错误消息的流语法,因为cout可以轻松地连接数字和字符串。我认为#error
无法连接数字和字符串。
会constexpr
有帮助吗?
答案 0 :(得分:1)
根据定义,编译期间会出现编译时错误,原因可能是编译器没有理解代码中的某些内容,或者因为您使用预处理器指令(如#error
或静态断言{{1})指定了条件}。
因此,如果要运行检查代码并使用static_assert ( bool_constexpr , message )
编写错误消息,则无法再调用结果编译时错误,因为用于检查它们的代码已经编译,因此错误本身就会运行时间错误。
请你写一下为什么#nror不会为你做这个伎俩?