4

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

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

4

1 回答 1

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"}); }

哪个铿锵++?

于 2012-05-14T23:50:42.653 回答