constexpr lambda expressions in C++
Visual Studio 2017 version 15.3 and later (available in /std:c++17
mode and later): A lambda expression may be declared as constexpr
or used in a constant expression when the initialization of each data member that it captures or introduces is allowed within a constant expression.
int y = 32;
auto answer = [y]() constexpr
{
int x = 10;
return y + x;
};
constexpr int Increment(int n)
{
return [n] { return n + 1; }();
}
A lambda is implicitly constexpr
if its result satisfies the requirements of a constexpr
function:
auto answer = [](int n)
{
return 32 + n;
};
constexpr int response = answer(10);
If a lambda is implicitly or explicitly constexpr
, and you convert it to a function pointer, the resulting function is also constexpr
:
auto Increment = [](int n)
{
return n + 1;
};
constexpr int(*inc)(int) = Increment;
See also
C++ Language Reference
Function Objects in the C++ Standard Library
Function Call
for_each
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for