https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117849
Barry Revzin <barry.revzin at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |barry.revzin at gmail dot com --- Comment #12 from Barry Revzin <barry.revzin at gmail dot com> --- I'm not sure this is quite right yet. This is on gcc trunk on compiler explorer right now, which is g++ (Compiler-Explorer-Build-gcc-8fbe7d24373556d40886c7c00e9e2be5d9718c55-binutils-2.42) 15.0.1 20250407 (experimental): template <class T, int N> struct Array { constexpr int size() const { return N; } }; struct A { Array<int, 4> a; void f() { static_assert(a.size() == 4); // ok } }; struct B { Array<int, 4>* p; void f() { static_assert(p->size() == 4); // error (expected) } }; struct C { Array<int, 4>& r; void f() { static_assert(r.size() == 4); // error (unexpected?) } }; struct D { Array<int, 4>& r; void f() { Array<int, 4>& local = r; static_assert(local.size() == 4); // error (unexpected?) } }; The A case works as expected, and the B case fails as expected (we didn't add pointers to unknown, just references to unknown). But the C and D cases both fail, and I would have expected them to succeed.