https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72580
Gleb Natapov <gleb at scylladb dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|INVALID |FIXED --- Comment #4 from Gleb Natapov <gleb at scylladb dot com> --- (In reply to Jonathan Wakely from comment #3) > (In reply to Gleb Natapov from comment #2) > > As far as I see it talks about copy constructor not move constructor. > > No, it says "the constructor" not "the copy constructor". > > Copy initialization refers to the syntactic form of initialization, not > whether it uses a copy constructor or a move constructor. > > It also specifically talks about "the copy/move operation". Spec talks about "the constructor selected for the copy-initialization". In my example throw gets lvalue object, so the object should be copied but the copy is elided. If I made object const the code compiles since copy cannot be elided. If I would throw E(1) then it would elide move indeed. Not that I doubt your reading of the spec, you are obviously more experienced in this (and Intel agrees with you), but I would like to understand it better.