Предположим, что у вас есть следующая (некорректная) программа:
struct A
{
A(int, int)
{
}
};
template <typename T>
class B
{
B()
{
if (sizeof (T) == 1)
{
throw A(0); // wrong, A() needs two arguments
}
}
};
int main()
{
return 0;
}
GCC компилирует эту программу без каких-либо ошибок, clang++ отказывается от нее с ошибкой.
- Можно ли сказать, что это не ошибка в GCC, потому что шаблон не создан?
- Какую магию делает clang, чтобы найти эту ошибку?
- Что говорит об этом в стандарте С++?