#c #lambda
#c #лямбда
Вопрос:
Смотрите этот простой пример,
constexpr auto f = [](const autoamp; foo){
foo.fun2();
};
struct Foo{
friend decltype(f);
void fun1() const{
f(*this);
}
private:
void fun2() const{}
};
int main(){
Foo foo{};
foo.fun1();
}
объявление друга, похоже, не работает. gcc жалуется, что fun2
является закрытым, даже если f
ему предоставлен доступ.
это приводит к ошибке компилятора
<source>: In instantiation of '<lambda(const auto:1amp;)> [with auto:1 = Foo]':
<source>:9:16: required from here
<source>:2:13: error: 'void Foo::fun2() const' is private within this context
2 | foo.fun2();
| ~~~~~~~~^~
<source>:13:10: note: declared private here
13 | void fun2() const{}
Комментарии:
1. Это должно работать? Если это так, аккуратно.
2. Похоже на ошибку. с clang все в порядке.
3. MSVC также не жалуется.
4. Этот лямбда на самом деле не лямбда, а шаблон. Это то, что, вероятно, смущает gcc.
5. Сообщение об ошибке GCC: gcc.gnu.org/bugzilla/show_bug.cgi?id=102791