Skip to content

Latest commit

 

History

History
59 lines (47 loc) · 1.75 KB

225.md

File metadata and controls

59 lines (47 loc) · 1.75 KB
Info

Example

int main() {
  constexpr auto okay_in_cpp20  = [] {};                    // okay in C++20
  constexpr auto error_in_cpp20 = [] mutable {};            // okay in C++23
  constexpr auto error_in_cpp20 = [] -> int { return {};};  // okay in C++23
}

https://godbolt.org/z/4Tjbb8xzr

Puzzle

  • Can you remove unnecessary ()'s from the following lambda expressions?
int main() {
  constexpr auto l1 = []() {};
  constexpr auto l2 = []()mutable{};
  constexpr auto l3 = []()mutable constexpr{};
  constexpr auto l4 = []()mutable consteval{};
  constexpr auto l5 = []()mutable consteval  {};
  constexpr auto l6 = []() -> int { return {}; };
  constexpr auto l7 = []() -> auto { return 0; };
  constexpr auto l8 = []<class...>() {};
  constexpr auto l9 = []<auto...>() {};
  constexpr auto l10 = []<auto...>() mutable {};
  constexpr auto l11 = []<auto...>() noexcept {};
}

https://godbolt.org/z/n6rPMjhaz

Solutions

int main() {
  constexpr auto l1 = [] {};
  constexpr auto l2 = [] mutable{};
  constexpr auto l3 = [] mutable constexpr {};
  constexpr auto l4 = [] mutable consteval {};
  constexpr auto l5 = [] mutable consteval  {};
  constexpr auto l6 = [] -> int { return {}; };
  constexpr auto l7 = [] -> auto { return 0; };
  constexpr auto l8 = []<class...> {};
  constexpr auto l9 = []<auto...> {};
  constexpr auto l10 = []<auto...> mutable {};
  constexpr auto l11 = []<auto...> noexcept {};
}

https://godbolt.org/z/ozro3cr53