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

23
我想在我的C ++代码中创建一个编译时错误,并附带自定义错误消息。我想做到这一点有几个原因:
  • 在开发新功能时,强制编译失败,因为它们尚未实现。(编译时!TODO 提醒)
  • 当尝试实现不支持的模板特化时,创建更易读的错误。
我相信有一种方法可以做到这一点,但我找不到解释这种方法的资源。我会将代码包装在以下格式的 #define 中:COMPILE_FAIL(“错误消息”);
谢谢 D

2
你需要的是 static_assert。https://dev59.com/RGw15IYBdhLWcg3wMY-L - legends2k
static_assert 在 msvc10 上完全胜任... :-) - Dominic Birmingham
3个回答

43

使用#error

#error "YOUR MESSAGE"

这会导致预处理器产生一个错误。如果你想在后面的阶段(例如模板处理时)检测到错误,请使用static_assert(C++11功能)。


26

请查看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
}

5

强制编译器错误(GCC、Clang风格):

#error "You ain't finished this yet!"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接