https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88358
--- Comment #4 from Nicolas Lesser <blitzrakete at gmail dot com> --- Almost the same fix has to apply when the declarator is unqualified: Always treat T::something as a value, never as a type. This is not part of the allowed contexts in P0634. I don't know which core discussion you're referring to, but this is still a well-formed program: template <typename T> int pi(T::your_pi); struct Foo { static constexpr int your_pi = 10; }; int main() { return pi<Foo>; // gcc rejects }