模板化初始化列表 - 为什么查找失败
考虑到
#include <utility>
template <typename T1, typename T2, typename T3>
void foo(std::initializer_list<std::pair<T1, T2>> _a, std::initializer_list<T3> _b) {
/* ... */
}
int main() {
foo({{1,2},{3,4}},{1,2,3,4,5});
}
为什么 gcc 4.6 会产生错误
error: nomatching function for call to 'foo(
注意:候选者为
注:template
更新 现在,当
template <typename T1, typename T2>
std::pair<T1, T2> p(const T1& _1, const T2& _2) {
return std::make_pair(_1, _2);
}
添加 并将 {{1,2},{3,4}}
替换为 {p(1,2), p(3,4)}
时可以使用>。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您想要做的基本上是链式转换/调用,这在C++中是不允许的。
首先,您需要将其转换
为 this(同时推导 type 参数),
然后将其转换为
std::initializer_list
。这是不允许的。您必须自己进行一次转换:
然后它将编译: http://ideone.com/bRJqV
What you're trying to do is basically chained conversion/invocation, which is not allowed in C++.
First you want to convert this,
into this (while deducing the type argument),
which then into
std::initializer_list
. It is not allowed.You've to do one conversion yourself:
then it will compile : http://ideone.com/bRJqV