コンパイル時のエラーをテストする方法はありますが、実際にエラーを生成することはありませんか? たとえば、コピーできないクラスを作成した場合、それをコピーしようとするとコンパイラ エラーが発生するという事実をテストしたいのですが、それでも他の実行時テストを実行したいと考えています。
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 などの使用に関する回答には興味がありません。