https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67650
--- Comment #27 from Vincent <vincent.lextrait at gmail dot com> --- Sorry for the silly check, are you sure you are trying with -O3 or -fdevirtualize -O2? You can try this with 8.1: void *v; template <typename T> struct LK: public BLKC { void rb(){((T*)v)->ax();} static T* st; }; As a replacement to the call to null, and the missing definition problem is reported. (In reply to Jonathan Wakely from comment #26) > (In reply to Vincent from comment #25) > > Oh, it used to be the case. I think that must be due to some additional > > artefact of more recent compilers. I'll try to find another way to show it. > > I tried 5.1.0 and 5.2.0 and several other previous releases, they all link > the program successfully, with just this warning: > > main.cpp:53:8: warning: 'I' has a field 'I::_e' whose type uses the > anonymous namespace