C++ 静态常量模板成员初始化在MSVC中失败

C++ 静态常量模板成员初始化在MSVC中失败,c++,visual-c++,c++11,C++,Visual C++,C++11,使用MSVC编译器时,在模板类上初始化静态常量变量时遇到问题。我试过MSVC2013、MSVC2012和MSVC2010。此代码与MinGW、MinGW-w64、GCC和Clang配合使用效果良好 #include <iostream> #include <string> using namespace std; template <typename T> struct StringHolder { static const std::string

使用MSVC编译器时,在模板类上初始化静态常量变量时遇到问题。我试过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;
}
#包括
#包括
使用名称空间std;
模板
StringHolder结构
{
静态常量std::string str;
};
模板常量字符串StringHolder::str{“integer”};
int main()
{
//使用MSVC2013编译时不打印任何内容,可与MinGW/GCC/Clang一起使用

据我所知,MS VC++2010不支持初始值设定项列表。看来VC++2012也不支持它们。

即使是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"};
p.p.S.模板化、非专用版本,甚至不编译^_^

template <typename T>
struct StringHolder
{
static const std::string str;
};

template <typename T>
const std::string StringHolder<T>::str{ "integer" };
模板
StringHolder结构
{
静态常量std::string str;
};
模板
const std::string StringHolder::str{“integer”};
xmemory0(611):错误C2143:语法错误:在“”之前缺少“;”


希望他们能在service pack中修复它。

VC++2013确实如此。这个编译器错误仍然存在于VS2015更新3工具链中。我还没有尝试过VS2017。
template <typename T>
struct StringHolder
{
static const std::string str;
};

template <typename T>
const std::string StringHolder<T>::str{ "integer" };