https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86429
Bug ID: 86429 Summary: lambda capture breaks constexpr-ness Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: zub at linux dot fjfi.cvut.cz Target Milestone: --- This issue seems similar to bug 82643 but unlike that bug, this code compiles fine in g++ 7.3 and fails to compile in g++ 8.1. Trying it out at wandabox.org with gcc HEAD (201807) also results in compilation error. The code requires boost hana: ==== #include <iostream> #include <boost/hana.hpp> int main() { namespace hana = boost::hana; constexpr auto map = hana::make_map(hana::make_pair(hana::type_c<int>, "foo")); [&](auto v) { constexpr auto x = boost::hana::find(map, v); std::cout << *x << '\n'; }(hana::type_c<int>); return 0; } ==== With g++ 7.3 and clang++ it compiles OK and when run, prints out "foo\n" on stdout. With g++ 8.1 I get: $ g++-8 -std=c++17 gcc-8.1-not_contant.cc gcc-8.1-not_contant.cc: In instantiation of ‘main()::<lambda(auto:1)> [with auto:1 = boost::hana::type_impl<int>::_]’: gcc-8.1-not_contant.cc:12:21: required from here gcc-8.1-not_contant.cc:10:18: error: ‘__closure’ is not a constant expression constexpr auto x = boost::hana::find(map, v); ^ While I'm not 100% sure the code is correct, even the error message is strange (__closure?).