Итак, я попытался скомпилировать приведенный ниже код, и он не сработал (как и ожидалось):
1.cpp: In function ‘int foo()’:
1.cpp:3:5: error: ‘some’ was not declared in this scope
some ill-formed code
^
Но если я уберу эту строку, компилятор скомпилирует ее без каких-либо ошибок (также ожидается, что неизвестно,Тип T
имеет метод random_name()
или нет).
Кажется, что диагностика для шаблонов, которые не используются (не создаются), является реализацией, определенной в некоторой степени.Но, возможно, у стандарта есть некоторые требования для таких случаев.Например, будет ли соответствовать стандарту компилировать приведенный ниже код без каких-либо ошибок?
Я пытался найти ответ на сайте, но не смог найти связанных вопросов.
template <class T>
int foo() {
some ill-formed code
return T::random_name();
}
template <>
int foo<int>() { return 0; }
int main() {
return foo<int>();
}