Visualc++10.0SP1-cl.exe版本16.0.40219.1访问冲突?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

我遇到了一个问题,用Visualstuido 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已停止工作,C 0000005异常”外):

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;
}
提问于
用户回答回答于
用户回答回答于

问题将在VisualStudio 2013 C++编译器中修复。

扫码关注云+社区

领取腾讯云代金券