• # Test avec le compilateur CL de Microsoft en toolset vc140

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche C++ se court-circuite le constructeur de copie. Évalué à 3.

    Hello,

    Pour le fun j'ai testé le code suivant avec le compilateur CL de Microsoft en toolset vc140.

    #include <iostream>
    int t[6] = { 0, 0, 0, 0, 0, 0 };
    struct A
    {
     A () { ++t[0]; }
     A (A const&) { ++t[1]; }
     A& operator=(A const&) { ++t[2]; return *this; }
    //#if __cplusplus > 201100
     A (A &&) { ++t[3]; }
     A& operator=(A &&) { ++t[4]; return *this; }
    //#endif
     ~A () { ++t[5]; }
    };
    A f () { return A (A ()); }
    int main ()
    {
     { A a = A (A (A (f ()))); }
     std::cout << "Dflt = " << t[0] << "\n"
     "Copy = " << t[1] << "\n"
     "CpAs = " << t[2] << "\n"
    //#if __cplusplus > 201100
     "Move = " << t[3] << "\n"
     "MvAs = " << t[4] << "\n"
    //#endif
     "Dtor = " << t[5] << '\n';
    }

    Résultats :

    Dflt = 1
    Copy = 0
    CpAs = 0
    Move = 3
    MvAs = 0
    Dtor = 4
    

    A priori CL ne sait pas faire l'élision aussi efficacement que g++ et clang++ dans ce cas de figure.