https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66256
David Stone <david at doublewise dot net> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |david at doublewise dot net --- Comment #8 from David Stone <david at doublewise dot net> --- I do not believe that gcc is correct to reject this code. Consider http://eel.is/c++draft/basic.scope.class#1 "The potential scope of a name declared in a class consists not only of the declarative region following the name's point of declaration, but also of all function bodies, default arguments, noexcept-specifiers, and brace-or-equal-initializers of non-static data members in that class (including such things in nested classes)." That seems to state that this variable is in scope and thus this code should be allowed. As a second test case, this should also be accepted (same code, but with e put in an unevaluated context instead of being static): struct test { test() noexcept(noexcept(e)) {} const bool e = false; }; int main() {} And also struct test { test() noexcept(noexcept(e())) {} const bool e() { return false; } }; int main() {}