Seb*_*nki 6 c++ visual-c++ c++11
我在使用MSVC编译器时在模板化类上初始化静态const变量时遇到问题.我试过MSVC2013,MSVC2012和MSVC2010.此代码适用于MinGW,MinGW-w64,GCC和Clang.
#include <iostream>
#include <string>
using namespace std;
template <typename T>
struct StringHolder
{
static const std::string str;
};
template<> const string StringHolder<int>::str { "integer" };
int main()
{
// prints nothing when compiled with MSVC2013, works with MinGW/GCC/Clang
cout << StringHolder<int>::str << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
即使MSVC2013仍然存在统一初始化的问题:str { "integer" }。
要使其与 M$VC 一起使用,请使用普通语法:
template<> const string StringHolder<int>::str = "integer";
template<> const string StringHolder<int>::str("integer");
template<> const string StringHolder<int>::str = {"integer"};
Run Code Online (Sandbox Code Playgroud)
我不确定 GCC 和 Studio 中谁更符合标准。希望一些勇敢的人会出现并给我们一个标准条款的链接;)
PS 至少非模板版本可以正常工作;)
struct StringHolder
{
static const std::string str;
};
const string StringHolder::str{ "integer" };
Run Code Online (Sandbox Code Playgroud)
PPS 模板化的非专业版本甚至无法编译 ^_^
template <typename T>
struct StringHolder
{
static const std::string str;
};
template <typename T>
const std::string StringHolder<T>::str{ "integer" };
Run Code Online (Sandbox Code Playgroud)
xmemory0(611): error C2143: syntax error : missing ';' before '<end Parse>'
希望他们能在服务包中修复它。