https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95368
Daniel Krügler <daniel.kruegler at googlemail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |daniel.kruegler@googlemail. | |com --- Comment #1 from Daniel Krügler <daniel.kruegler at googlemail dot com> --- (In reply to Rafael Avila de Espindola from comment #0) > gcc accepts > [..] I found your code confusing, because the actual problem becomes visible only under certain conditions. So lets make it a proper example, that shows the problem immediately and lets ensure that we make it free from library dependencies and provide all required information: When using gcc HEAD 11.0.0 20200525 (experimental) and the following compiler flags -Wall -Wextra -std=gnu++2a -pedantic to compile this code: //--------- template<class, class> constexpr bool is_same_v = false; template<class T> constexpr bool is_same_v<T, T> = true; struct foo { void func() {} }; void bar(foo& v) { [v]() { static_assert(is_same_v<decltype(v), foo&>); [v]() mutable { static_assert(is_same_v<decltype(v), foo&>); v.func(); }(); }(); } int main() {} //--------- the program is rejected (but should be accepted) with the following diagnostics: ``` prog.cc: In lambda function: prog.cc:17:16: error: passing 'const foo' as 'this' argument discards qualifiers [-fpermissive] 17 | v.func(); | ^ prog.cc:9:8: note: in call to 'void foo::func()' 9 | void func() {} | ^~~~ ```