• lysdexicOPM
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    True, though here the hack is incredibly unintuitive for the programmer.

    I don’t think this trick is anything other than trivia. The happy path to enable RVO is to provide a move constructor. There is nothing unintuitive about that.

    This trivia item just points out that the way the C++ standard is specified, the definition isn’t actually required. That’s hardly relevant.

    Not to mention the compiler error that should catch this now only occurs at link time, and linking errors are even more cryptic to grok.

    There is nothing peculiar about handling missing definitions. Linkers only flag those if a symbol is actually missing.

    When they made RVO mandatory, they should’ve removed the constructor declaration requirement as well, instead of a half-ass solution like this.

    I don’t think that your observation makes sense, or is even appropriate to the topic. RVO requires a movable type, and the rule of 5 is a well established aspect of C++. RVO does not change anything in that regard.