【发布时间】:2017-12-03 16:41:59
【问题描述】:
我正在尝试从 lambda 调用一个函数,该函数是在特定成员函数中运行 std::for_each 的一部分。 这里的例子: https://godbolt.org/g/KCBLjL
namespace A {
struct Foo {
int a;
int b;
};
void dump(const A::Foo& v) {
std::cout << v.a << v.b << std::endl;
}
} // ns A
class B {
public:
void dump() const {
(void)std::for_each(std::begin(foo), std::end(foo),
[](const A::Foo &f){
dump(f); // <- fails here, I expected ADL to kick in
});
}
private:
std::vector<A::Foo> foo = { A::Foo{}, A::Foo{} };
};
得到:
<source>: In lambda function:
21 : <source>:21:19: error: no matching function for call to
'B::dump(const A::Foo&)'
dump(f);
^
18 : <source>:18:10: note: candidate: void B::dump() const
void dump() const {
为什么 ADL 在这里失败了? 我假设编译器会找到 B::dump 但也因为 A::Foo 在同一个命名空间中有 dump(const Foo&) ,编译器会将其添加为选项。但它不起作用。用-std=c++17编译
【问题讨论】:
标签: c++