https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88857
--- Comment #7 from Will Benfold <will at benfold dot com> --- I think it's not so much class vs struct: I get an ICE iff 'a' is private. Just changing class -> struct stops the ICE, but then it comes back again if you make 'a' private. Similarly, with a class you can make the ICE go away if you make 'a' public.