https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85043
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Maybe we could suppress the warning for explicit type conversions using functional notation, i.e. A(a), when the copy constructor is user-provided. It's not a perfect heuristic. It would still warn for (A)a and static_cast<A>(a) which have identical semantics according to the standard. And suppressing the warning for user-provided copy constructors would mean we still warn for a type like struct B : A { }; even though it should probably be treated just like A. Suppressing the warning for non-trivial copy constructors would miss warnings for anything including a std::string or other non-trivial type, even though the copy might really be useless. But at least there would be a way to alter code to avoid the warning, which could be documented.