无法从'initializer-list'转换为'std :: initializer_list <Keyword>&'

Tom*_*shu 2 c++ initializer-list c++11 visual-studio-2013

我正在尝试使用初始化列表将关键字列表传递给tokenizer进行注册.但它在Visual Studio 2013中不起作用.它适用于ideone.com上的gcc.有没有办法在VS中使用这个或类似的语法?

struct Keyword
{
    const char* name;
    int id;
};

void AddKeywords(int group, std::initializer_list<Keyword>& lis) {}

// usage
AddKeywords(ITEM_TYPE, {
    { "weapon", IT_WEAPON },
    { "armor", IT_ARMOR }
});
Run Code Online (Sandbox Code Playgroud)

完整错误:

item.cpp(810): error C2664: 'void AddKeywords(int,std::initializer_list<Keyword> &)' : cannot convert argument 2 from 'initializer-list' to 'std::initializer_list<Keyword> &'
Run Code Online (Sandbox Code Playgroud)

Nia*_*all 7

您正在尝试将临时绑定到非const引用;

std::initializer_list<Keyword>& lis
Run Code Online (Sandbox Code Playgroud)

试试;

std::initializer_list<Keyword> const& lis
Run Code Online (Sandbox Code Playgroud)

要么

std::initializer_list<Keyword> lis
Run Code Online (Sandbox Code Playgroud)

使用GCC构建时,启用-Wall -pedantic它也应该给您一个错误.