В GCC внутри лямбды я могу получить переменную constexpr из лямбды шаблона, отличного от constexpr, но не в Visual C++.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 В GCC внутри лямбды я могу получить переменную constexpr из лямбды шаблона, отличного от constexpr, но не в Visual C++.

Сообщение Anonymous »

Этот код нормально компилируется в gcc, но не компилируется в Visual C++.
MCVE = https://godbolt.org/z/K7d5PEs65

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

int main(){
int localVariable=0; //some local variable
auto lamb=[&]() {
if constexpr(s==5){localVariable=7;}
///^ may modify some local variables
return 8;
};
constexpr int gOk=lamb.operator()();
[&]() {
///vvv can edit only here
constexpr int gFail=lamb.operator()();
///^^^ can edit only here
}.operator()();
}
Ошибка выражения C2131 не привела к константе

Мне нужен gFail< /code> должна быть переменной constexpr, тогда как Lamb иногда создает побочный эффект во время выполнения, в зависимости от значения переменной шаблона s.
Пожалуйста, дайте ссылку и обходной путь для случая Visual C++.


Подробнее здесь: https://stackoverflow.com/questions/787 ... expr-templ
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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