https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85043
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #4) > Why would user-provided copy ctor matter? In this testcase there is no > user-provided copy ctor, what matters is that the static cast is handled > through > perform_direct_initialization_if_possible as direct initialization of a > temporary, without the cast there is no temporary. > > -Wuseless-cast complains about all these below, and none of the casts are > useless, all of them create a temporary. So perhaps not warn at all if > CLASS_TYPE_P (type)? Yes I suppose you're right. For a non-class type all operators that modify the operand also have non-modifying forms, i.e. ++i can be replaced by (i + 1), and i+=n can be replaced with i+n, so there's no need to perform a useless cast to create a temporary. So creatinga not-useless temporary is only necessary for class types.