我想在编译时创建自己的警告,而不是在预处理器中创建(我已经看过几个答案) 假设我们有:
class A
{
private:
explicit A(A const& other);
};
现在,如果用户执行:
A first;
然后:
A second(first);
他会得到一个错误,即构造的副本没有实现或者其他什么..请记住我的代码中有很多遗产...以及引用我的H文件A是否实现我试图使用复制构造函数...
所以..而不是编译器的默认警告我想创建自己的.... 像......“你不能使用复制构造函数”
帮助? 谢谢!
答案 0 :(得分:2)
使用带有用户定义消息的static_assert
将在编译期间触发此错误消息
class A
{
private:
A() {}
explicit A(A const& /* other */)
{
static_assert(false, "You cannot use copy constructor");
}
};
int main()
{
A first;
A second(first); // compile error
}
上的输出
注意这会产生错误,而不是警告。但是,几乎总是最好使用“警告为错误”编译器选项并明确(即记录注释)禁用您知道无害的警告。
答案 1 :(得分:1)
没有预处理器,只使用标准C ++,它是不真实的。您可以使用static_assert
,但不会发出警告。