https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67650
--- Comment #10 from Vincent <vincent.lextrait at gmail dot com> --- Additionally, in the snippet: template <typename RC> struct EN: public RE<int> { EN(::std::string){} void rp(){} }; If you replace ::std::string by const char*, the problem disappears. More generally, essentially any simplification of the code, unrelated to virtuals, makes the problem disappear.