Захват константного значения с плавающей точкой
Почему этот код компилируется gcc
int main() {
const auto x = 42;
[](){ x; };
}
, а этот нет
int main() {
const auto x = 42.;
[](){ x; };
}
Если же использовать constexpr, то компилируются оба варианта.
Почему 1 вариант не компилируется clang?
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Константное целое значение доступно в лямбде даже если не захвачено. Это специальное правило. Для вещественных значений такого правила нет. Полагаю что это нужно чтобы объявлять массив указанной длины. const int можно использовать в таком качестве довольно давно.
https://en.cppreference.com/w/cpp/language/lambda
A lambda expression can read the value of a variable without capturing it if the variable * has const non-volatile integral or enumeration type and has been initialized with a constant expression, or * is constexpr and has no mutable members.