Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在lambda中调用函数时,ADL失败_C++ - Fatal编程技术网

C++ 在lambda中调用函数时,ADL失败

C++ 在lambda中调用函数时,ADL失败,c++,C++,我试图从lambda调用一个函数,该函数是在特定成员函数中运行std::for_each的一部分。 示例如下: 名称空间A{ 结构Foo{ INTA; int b; }; 无效转储(常量A::Foo&v){ 标准::cout 问题是,在包含lambda调用的作用域中,您已经有一个名为dump()的符号,在这个方法中,它优先 如果将此方法命名为dump2(),则查找将按预期成功 …除了 通常的非限定名称所考虑的作用域和名称空间 查找 “除了通常的非限定名称查找所考虑的作用域和名称空间之外” “

我试图从lambda调用一个函数,该函数是在特定成员函数中运行std::for_each的一部分。 示例如下:

名称空间A{
结构Foo{
INTA;
int b;
};
无效转储(常量A::Foo&v){
标准::cout
问题是,在包含lambda调用的作用域中,您已经有一个名为
dump
()的符号,在这个方法中,它优先

如果将此方法命名为
dump2()
,则查找将按预期成功

…除了 通常的非限定名称所考虑的作用域和名称空间 查找

“除了通常的非限定名称查找所考虑的作用域和名称空间之外”

“常规”非限定名称查找在调用类中找到
dump()
符号。句号。

,强调:

设X为非限定查找产生的查找集,Y为参数相关查找产生的查找集(定义如下)。 如果X包含

  • 类成员的声明,或
  • 不是using声明的块作用域函数声明,或
  • 既不是函数也不是函数模板的声明
那么Y是空的。

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 {
void dump() const {