C++11 为什么这个c++;示例未在MSVC上编译? 例子
为什么下面的代码段不构建在MSVC(2015,64位)上。它是其他代码的简化版本,这就是它看起来有点奇怪的原因C++11 为什么这个c++;示例未在MSVC上编译? 例子,c++11,visual-studio-2015,C++11,Visual Studio 2015,为什么下面的代码段不构建在MSVC(2015,64位)上。它是其他代码的简化版本,这就是它看起来有点奇怪的原因 #include <string> template<class T> class A {}; template<class T> using AA = A<T>; //duplicate using statement template<class T> using AA = A<T>; int main
#include <string>
template<class T>
class A {};
template<class T>
using AA = A<T>;
//duplicate using statement
template<class T>
using AA = A<T>;
int main(int argc, char *argv[]) {
return 0;
}
#包括
模板
A类{};
模板
使用AA=A;
//重复使用语句
模板
使用AA=A;
int main(int argc,char*argv[]){
返回0;
}
编译错误
C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(780):错误C2665:“std::\u String\u alloc::\u String\u alloc”:3个重载都不能转换所有参数类型
具有
[
_Elem=char,
_Alloc=std::分配器
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(744):注意:可以是“std::\u String\u alloc::\u String\u alloc(std:\u String\u alloc&)”
具有
[
_Elem=char,
_Alloc=std::分配器
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(744):注意:或“std:\u String\u alloc::\u String\u alloc(const std::\u String\u alloc&)”
具有
[
_Elem=char,
_Alloc=std::分配器
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(587):注意:或“std:_String\u alloc::_String\u alloc(void)”命令
具有
[
_Elem=char,
_Alloc=std::分配器
]
C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(780):注意:在尝试匹配参数列表(std:_Wrap_alloc)时
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(775):注意:在编译类模板成员函数“std::basic_string::basic_string(const std::basic_string&)”时
C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\system\u error(522):注意:请参阅正在编译的函数模板实例化“std::basic\u string::basic\u string(const std::basic\u string&)”的参考
C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\stdexcept(21):注意:请参阅正在编译的类模板实例化“std::basic_string”的参考
条件
如果
- 基于linux或mac和gcc构建
已删除#include
- 删除重复的using语句
通过使用Microsoft(R)C/C++优化编译器版本19.00.24210 for x64在Windows 8.1上执行
cl main.cpp
构建。在我看来像是一个VC错误。这看起来像是有史以来最奇怪的错误+1如果您想看到更奇怪的东西,请将#include
移到末尾!它在(19.00.23506(x64))上显示不同的错误,但在(19.10.24903.0(x86))上成功编译。它可能已经修复,或者它可能是一个仅限x64的问题,或者它可能取决于更多的细节,而不仅仅是编译器版本。我在此处与microsoft打开了一个错误报告: