我想更多地了解C ++ 11,所以我编写了我所知道的最简单的initializer_list测试,但是在模板内部,这是一个“免费”函数, 每当我编译它时我都会收到此错误(clang ++表示非常格式化)
/home/alex/repo/mine/mlcppl/test/utiltest1.cc:16:3: error: no matching function for call to 'makevec'
mlcppl::makevec<string> ({"alex", "herrmann"});
以下是代码:
namespace mlcppl{
template<typename Tp> vector<Tp> makevec (initializer_list<Tp> initlist)
{
vector<Tp> vt;
for(Tp x : initlist)
{
vt.insert(vt.end(), x);
}
return vt;
}
}
这里是它的所在地:
#include <util.hh>
int main()
{
vector<string> vc;
vc = makevec<string> ({"alex", "herrmann"});
return 0;
}
我不知道为什么会发生这种情况,有什么建议吗?
答案 0 :(得分:4)
这适用于g ++(Ideone):
#include <vector>
#include <string>
template<typename Tp> std::vector<Tp> makevec (std::initializer_list<Tp> initlist) { return initlist; }
int main() { makevec<std::string> ({"alex", "herrmann"}); }
哪个clang ++?