Я столкнулся с проблемой компиляции кода шаблона с Visual Stuido 2010 SP1, cl.exe версии 16.0.40219.1
Следующий код приведет к нарушению доступа компилятора:
template<typename T>
class A
{
A(){}
};
template<typename T>
class B : public A<T>
{
using A::A(); // Compiler access violates
// **EDIT**
//using A<T>::A<T>; // Compiler succeeds
//using A<T>::A(); // Compiler reports error
};
int main(int argc, char* argv[])
{
return 0;
}
Он генерирует следующую ошибку (в дополнение к "cl.exe перестает работать, исключение C0000005):
1>d:\projects\cpptest\cpptest\cpptest.cpp(11): fatal error C1001: An internal error has occurred in the compiler.
1> (compiler file 'msc1.cpp', line 1420)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
Код компилируется отлично (ну, то есть он испускает правильное сообщение об ошибке и не разбивает компилятор) в Dev-С++ с g++.
main.cpp:11: error: `template<class T> class A' used without template parameters
main.cpp:11: error: expected nested-name-specifier before "A"
main.cpp:11: error: using-declaration for non-member at class scope
main.cpp:11: error: expected `;' before '(' token
main.cpp:11: error: expected unqualified-id before ')' token
make.exe: *** [main.o] Error 1
ИЗМЕНИТЬ Однако следующее, компилируется в порядке, без нарушения прав доступа, поэтому, похоже, это связано с шаблонами:
class A
{
A(){}
};
class B : public A
{
using A::A;
};
int main(int argc, char* argv[])
{
return 0;
}
Считаете ли вы, что это стоит сообщить Microsoft? Может ли кто-нибудь еще воспроизвести это? Возможно, попробуйте в Visual Studio 2013 посмотреть, все ли это происходит?