Ошибка компилятора в Visual C ++ 10.0 SP1 — cl.exe версия 16.0.40219.1 Нарушение прав доступа [подтверждено]

Я столкнулся с проблемой компиляции некоторого кода шаблона с помощью 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-C ++ с 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, чтобы увидеть, если это все еще происходит?

18

Решение

Так как это воспроизводится другими на платформах Visual C ++, я открыл сообщение об ошибке на Microsoft Connect как «ответ».

Также, в качестве обходного пути, работает следующий синтаксис:

using A<T>::A<T>;
4

Другие решения

Обновление 2013-12-06: Microsoft подтвердила проблему, и проблема будет исправлена ​​в компиляторе Visual Studio 2013 C ++.

0