Почему неквалифицированный имени имени зависимого имени не находит Lambda Delclared между декларацией шаблона и экземпляC++

Программы на C++. Форум разработчиков
Anonymous
Почему неквалифицированный имени имени зависимого имени не находит Lambda Delclared между декларацией шаблона и экземпля

Сообщение Anonymous »

Следующая программа неверна, < /p>

Код: Выделить всё

inline constexpr auto makeFoo = [](auto const& x) {
return getFoo(x);
};

inline constexpr auto getFoo = [](int const&) {
return 1;
};

int bar() {
return makeFoo(32);
}
и изменение определений makefoo и getfoo делает это правильным.
Я понимаю, что на основе «неформального» понимания двухфазовых имен is a generic lambda, and getFoo in its body is invoked on an argument whose type is not known yet, so the name getFoo can't be looked up yet;
when the call makeFoo(32) is seen, the lambda's operator() is intantiated with auto = int, so the second-phase lookup Для неквалифицированного имени getfoo < /code> происходит; < /li>
Это, однако, является только ADL, поэтому он не обнаруживает getfoo < /code>, потому что это название лямбды, то есть объект, а не функцию. Приведенное выше объяснение?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... -delclared

Вернуться в «C++»