https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96095
Bug ID: 96095 Summary: decltype((r)) inside of lambda with copy capture gives wrong type Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: barry.revzin at gmail dot com Target Milestone: --- Couldn't find a dupe for this one. The example from what is now [expr.prim.id.unqual]/2 (http://eel.is/c++draft/expr.prim.id.unqual#2) doesn't have the expected behavior: template <typename T, typename U> inline constexpr bool is_same_v = false; template <typename T> inline constexpr bool is_same_v<T, T> = true; void f(float x, float& r) { [=] { static_assert(is_same_v<decltype(x), float>); static_assert(is_same_v<decltype((x)), float const&>); static_assert(is_same_v<decltype(r), float&>); static_assert(is_same_v<decltype((r)), float const&>); // error }(); } gcc reports decltype((r)) to be float&, not float const& here.