https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89793
Harald van Dijk <harald at gigawatt dot nl> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |harald at gigawatt dot nl --- Comment #1 from Harald van Dijk <harald at gigawatt dot nl> --- Your StringType provides a conversion operator to HTTPResponse, which indirectly has std::allocator<char> as a private base class. Overload resolution happens before access checks, so the fact that it is a private base class does not prevent the construction of std::string from being ambiguous: the conversion to HTTPResponse could be used followed by the construction of a new std::string using the HTTPResponse as the allocator. This appears to work the same way in GCC 8 as it does in GCC 7, although it is possible that for whatever reason, the GCC 7 version ends up not including std::allocator<char> as a base class.