https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79671
--- Comment #67 from Michael Matz <matz at gcc dot gnu.org> --- (In reply to Jason Merrill from comment #66) > The operator semantics described in clause 5 [expr] apply to the built-in > operators, not any overloaded operators. Assignment of classes is always > done by way of an assignment operator function, even if it happens to be > trivial and therefore open-coded as a block copy, so the above doesn't apply > to classes. I think that's at least slippery. If none of 5.18 would apply to class types at all there would be no need for 5.18/3 (if non-class type) 5.18/4 (if class-type) 5.18/5 (class objects are special), or 5.18/9.2 (braced-inits for class objects). So if /2 would have been conditional on "non-class type" as well, like /3, it wouldn't matter, but so ... (This is of course only a side-track, I used clause 5 merely because like you I have difficulties to find a real definition of what constitutes an access to the value of an object :) )