https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100629
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |UNCONFIRMED Ever confirmed|1 |0 --- Comment #19 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to James McKelvey from comment #17) > Sorry, that constructor is in the .cc file. Ah yes, sorry, I see it now. I tried to reproduce the issue with this code, but the symbol is always mangled consistently (with and without MAIN defined): #include <vector> #include <string> class CString { }; extern const std::vector<std::string> complement_names; extern const CString COMPLEMENTENUM; template <const std::vector<std::string>& names, const CString& title> class TemplateEnum { }; class ConflateIntegerScalarValue { }; typedef TemplateEnum<complement_names, COMPLEMENTENUM> ComplementEnum; struct BreakPattern { BreakPattern(const std::string&, const ConflateIntegerScalarValue&, const ConflateIntegerScalarValue&, const ComplementEnum&); }; #ifdef MAIN int main() { BreakPattern b("", {}, {}, {}); } #else BreakPattern:: BreakPattern(const std::string&, const ConflateIntegerScalarValue&, const ConflateIntegerScalarValue&, const ComplementEnum&) { } #endif