https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100091
--- Comment #4 from Pilar Latiesa <pilarlatiesa at gmail dot com> --- > Of course such use of a lambda is quite pointless Not as pointless as it might appear. This defaulted template parameter enables a form of stateful metaprogramming: #include <type_traits> template<typename, typename = decltype([]{})> class T {}; static_assert(!std::is_same_v<T<int>, T<int>>); // passes with GCC 10 I don’t know if that is valid C++, and would love to know whether or not it is. On the other hand, sometimes it is convenient to use lambdas this way: template<typename TOp = decltype([](double x) { return x * x; })> class my_functor { [[no_unique_address]] TOp const Op = {}; };