Мой код:
Код: Выделить всё
template
void foo() {
struct Local {
using Nested = int;
};
int local_var = 0;
auto lambda1 = []() {
typename Local::Nested value1;
return 0;
};
auto lambda2 = [local_var]() {
typename Local::Nested value2;
return 0;
};
}
int main() {
foo();
}
- GCC и Clang: принять вариант 1 (без захвата), но отклонить вариант 2 (с захватом), требуя имя типа только в захватывающей лямбде.
- MSVC: Отклоняет оба случая, всегда требуя typename.
- EDG: Принимает оба случая, никогда не требуя typename.
- Почему добавление лямбда-захвата меняет вопрос о том, считается ли Local::Nested зависимым именем?
- Какой компилятор соответствует стандарту C++?
- Является ли Local::Nested действительно зависимым именем, поскольку Local определяется локально и не зависит от T?
Подробнее здесь: https://stackoverflow.com/questions/798 ... al-type-in