Почему нельзя использовать приватный метод в лямбде?

Наличие такого класса:

class A {
public:
    bool hasGrandChild() const;

private:
    bool hasChild() const;
    vector children_;
};

Почему нельзя использовать приватный метод hasChild()в лямбда-выражении, определенном в методе hasGrandChild()вот так?

bool A::hasGrandChild() const {
    return any_of(children_.begin(), children_.end(), [](A const &a) {
        return a.hasChild();
    });
}

Компилятор выдает ошибку, что метод hasChild()является приватным в контексте. Есть ли обходной путь?

Изменить: Кажется, код, который я разместил, изначально работает. Я думал, что это эквивалентно, но код, который не работает на GCC , больше похож на этот:

#include 
#include 

class Foo;

class BaseA {
protected:
    bool hasChild() const { return !children_.empty(); }
    std::vector children_;
};

class BaseB {
protected:
    bool hasChild() const { return false; }
};

class Foo : public BaseA, public BaseB {
public:
  bool hasGrandChild() const {
    return std::any_of(children_.begin(), children_.end(), [](Foo const &foo) {
        return foo.BaseA::hasChild();
      });
  }  
};

int main()
{
  Foo foo;
  foo.hasGrandChild();
  return 0;
}

Похоже, что есть проблема с полными именами, так как это не работает , но это работает .

20
задан Juraj Blaho 20 January 2014 в 08:33
поделиться