Есть ли способ проверить ошибки времени компиляции, но без фактического создания ошибки? Например, если я создаю некопируемый класс, я хотел бы проверить тот факт, что попытка его копирования вызовет ошибку компилятора, но я все же хотел бы выполнить другие тесты времени выполнения.
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.
Я предполагаю, что это не может быть сделано так просто, но есть ли идиоматический способ сделать это, или я должен свернуть свое собственное решение (может быть, используя скрипты, компилирующие отдельные файлы тестов и проверяющие результаты?)?
N.B.: Я взял non-copyable только для того, чтобы проиллюстрировать свою точку зрения, поэтому меня не интересуют ответы об использовании boost::noncopyable и тому подобное.