如何在C++中强制编译错误?

Dom*_*ham 16 c++ debugging compiler-errors compilation output

我想在我的C++代码中使用自定义错误消息创建编译时错误.我想这样做有几个原因:

  • 在我正在开发尚未实现的新功能时强制编译失败.(编译时间!TODO提醒)
  • 尝试实现不受支持的模板特化时创建更可读的错误.

我确信这样做有一个技巧,但我找不到解释方法的资源.我将代码包装在COMPILE_FAIL形式的#define中("错误消息");

感谢:D

nne*_*neo 36

用途#error:

#error "YOUR MESSAGE"
Run Code Online (Sandbox Code Playgroud)

这会从预处理器产生错误.如果要在稍后阶段检测错误(例如在模板处理期间),请使用static_assert(C++ 11功能).


Rap*_*ptz 20

看看static_assert.

例:

#include <iostream>
#include <type_traits>

template<typename T>
class matrix {
    static_assert(std::is_integral<T>::value, "Can only be integral type");
};

int main() {
    matrix<int*> v; //error: static assertion failed: Can only be integral type
}
Run Code Online (Sandbox Code Playgroud)


小智 5

强制编译错误(GCC,Clang样式):

#error "You ain't finished this yet!"
Run Code Online (Sandbox Code Playgroud)