C++ GCC拒绝参数的列表初始化

C++ GCC拒绝参数的列表初始化,c++,c++11,gcc,initializer-list,list-initialization,C++,C++11,Gcc,Initializer List,List Initialization,我有以下代码: #include <initializer_list> #include <utility> enum class Classification { Unspecified, Primary, Secondary }; class ClassificationMap { public: ClassificationMap(std::initializer_list<std::pair<const Classification

我有以下代码:

#include <initializer_list>
#include <utility>

enum class Classification
{
  Unspecified,
  Primary,
  Secondary
};

class ClassificationMap
{
public:
  ClassificationMap(std::initializer_list<std::pair<const Classification, int>> content = {});
};

void foo(ClassificationMap) {}

int main()
{
    foo({{Classification::Unspecified, 42}});
}
#包括
#包括
枚举类分类
{
未明,
主要的,重要的
次要的
};
类分类图
{
公众:
ClassificationMap(std::initializer\u list content={});
};
void foo(分类映射){}
int main()
{
foo({Classification::Unspecified,42}});
}
Visual Studio 2013和2017以及Clang 3.4.1(及更高版本)都可以很好地编译代码。从我的角度来看,也应该没问题。但是,GCC 5.1拒绝编译,错误如下:

<source>: In function 'int main()':
<source>:22:44: error: could not convert '{{Unspecified, 42}}' from '<brace-enclosed initializer list>' to 'ClassificationMap'
     foo({{Classification::Unspecified, 42}});
:在函数“int main()”中:
:22:44:错误:无法将“{Unspecified,42}}”从“”转换为“ClassificationMap”
foo({Classification::Unspecified,42}});

(我正在将正确的标准标志(
-std=c++11
)传递给GCC和Clang)

我的代码中是否存在问题,或者这实际上是一个GCC错误



补充信息:在我的真实代码中,初始化器列表用于初始化
ClassificationMap
类的无序映射成员(这就是它的类型是什么的原因)。我需要在VS2013和GCC 5.1中使用该代码这里有一个很好的解决方案(放弃默认值):

类分类映射
{
公众:
分类图(std::初始值设定项\列表内容);
ClassificationMap():ClassificationMap({}){}
};
你会有你想要的确切行为,它会在任何地方编译


在它们周围添加另一组
{}
使其工作。确实很奇怪……另外,在
ClassificationMap(std::initializer\u list content={})中删除
={}
让它在g++中编译,这很奇怪,也修复了它:
foo(std::initializer\u list{{Classification::Unspecified,42})std::initializer\u list
的类型。Clang处理得很好。你有没有告诉GCC使用正确的C++标准?e、 g.
-std=c++11
?我认为问题在于无法将括号内的初始化列表转换为
std::pair
(没有这样的构造函数),而
ClassificationMap
构造函数就是这样做的。额外的大括号“解决”了这个问题,因为直接列表初始化了整个过程。
class ClassificationMap
{
public:
    ClassificationMap(std::initializer_list<std::pair<const Classification, int>> content);
    ClassificationMap() : ClassificationMap({}) {}

};