模板内部的C ++初始化列表

时间:2012-05-14 23:39:58

标签: c++ templates c++11 initializer-list

我想更多地了解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;
}

我不知道为什么会发生这种情况,有什么建议吗?

1 个答案:

答案 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 ++?