有没有办法测试编译时错误,但实际上不产生错误?例如,如果我创建了一个不可复制的类,我想测试尝试复制它会产生编译器错误的事实,但我仍然想执行其他运行时测试。
struct Foo {
int value_;
Foo(int value) : value_(value) {}
private:
Foo(const Foo&);
const Foo& operator=(const Foo&);
};
int main()
{
Foo f(12);
assert(f.value_ == 12);
assert(IS_COMPILER_ERROR(Foo copy(f);));
} // Would like this to compile and run fine.
我想这不能像那样简单地完成,但是有没有一种惯用的方法来做到这一点,或者我应该推出自己的解决方案(也许使用脚本编译单独的测试文件并测试结果?)?
注意:我使用 non-copyable 只是为了说明我的观点,所以我对使用 boost::noncopyable 等的答案不感兴趣。