Код: Выделить всё
namespace na {
struct Foo {
friend int getFoo(Foo const&, int const&) {
return 1;
}
};
inline constexpr auto makeFoo = [](auto const& sys) {
return [sys]{
return getFoo(sys, 0);
};
};
}
constexpr auto getFoo = [](auto const&) { return 1; };
namespace nc {
int bar() {
return na::makeFoo(na::Foo{})();
}
}
(¹) Действительно, этого достаточно, чтобы переместить эту лямбду внутри пространства имен na {< /code>, и мы получаем ожидаемое переопределение 'getfoo' как разные виды символа < /code> на все три компиляции. Исправляет проблему.
Другое решение было бы (и, возможно, все еще полезно сделать это), чтобы сделать это Makefoo не общая лямбда, изменяя Auto на foo , таким образом, вынуждая поиск для Getfoo .>
Подробнее здесь: https://stackoverflow.com/questions/795 ... ng-a-lambd