https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105874
--- Comment #5 from Tamar Christina <tnfchris at gcc dot gnu.org> --- Ah, great, Thanks Roger! I did end up reducing it to: template <int a> class b { public: int c[a]; int operator[](long d) const { return c[d]; } }; class board { bool is_eye(int, int); static const b<2> e; }; const b<2> board::e{{}}; bool board::is_eye(int d, int) { int f(e[d]); if (f) return false; return true; } but looks like you already have a patch :) Nice patch btw!