Ниже приведен фрагмент тестового кода, и я сравниваю результат компиляции с MSVC и Clang соответственно. Вывод каждого компилятора показан ниже. MSVC делает вид, что декларация неиспользуемого шаблона даже не существует. Clang производит ошибку. Вопрос в том, какой компилятор здесь наиболее стандартен?
Я видел устаревший производственный код, который опирается на поведение MSVC, и я не уверен, можно ли продолжать его использовать.
class S
{
struct P {};
};
template<typename T>
S::P Bat(T);
Скомпилируется в MSVC10:
E:\clangbuild\bin\Release>cl /c /nologo test.cpp
test.cpp
Производит ошибку в Clang:
E:\clangbuild\bin\Release>clang++ test.cpp
test.cpp:9:4: error: 'P' is a private member of 'S'
S::P Bat(T);
^
test.cpp:5:9: note: implicitly declared private here
struct P {};
^
1 error generated.