https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118631
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The copy constructor is needed because of: ``` StringSet operator + ( const StringSet& stringSetA, const StringSet& stringSetB ) { StringSet resultStringSet{ stringSetA }; resultStringSet.include( stringSetB ); return resultStringSet; } ``` That copies stringSetA but it uses the default one which will copy the reference pointing to the stringSetA.msets_ and still point to that.