Код: Выделить всё
struct A {
int a = 2;
constexpr A(auto&&) {}
};
constexpr int f() {
return [i=1](this A){return i;}();
}
int main() {
return f(); // 2 in MSVC and EDG
}
static_assert( f() == 2 ); // true in EDG
- И MSVC, и EDG возвращают 2 из main() несмотря на то, что, казалось бы, ожидается 1 из (this A){return i;}();,
- EDG даже оценивает это постоянное выражение как 2, в то время как MSVC жалуется:
error C2131: выражение не получило константу
примечание: сбой вызван попыткой доступа к элементу объекта динамического типа 'A', в котором этот элемент не определен
- и GCC вообще отказывается принять его:
ошибка: лямбда с захватами может не иметь явного параметра объекта несвязанного type
Онлайн-демо
Не могли бы вы указать, что не так с программой и какая реализация правильная?
Подробнее здесь: https://stackoverflow.com/questions/798 ... lated-type