Gewährleistet C ++ 11, dass ein temporäres Objekt, das an eine Funktion übergeben wurde, vor dem Funktionsaufruf erstellt wurde?

Gewährleistet Standard C ++ 11, dass alle 3 temporären Objekte erstellt wurden, bevor die Funktion ausgeführt wird?

Auch wenn temporäres Objekt übergeben wurde als:

Objek rvalue-referencewurde nur Mitglied des temporären Objekts

http: //ideone.com/EV0hS

#include <iostream>
using namespace std;

struct T { 
    T() { std::cout << "T created \n"; }
    int val = 0;
    ~T() { std::cout << "T destroyed \n"; }
};

void function(T t_obj, T &&t, int &&val) {
    std::cout << "func-start \n";
    std::cout << t_obj.val << ", " << t.val << ", " << val << std::endl;
    std::cout << "func-end \n";
}

int main() {

    function(T(), T(), T().val);

    return 0;
}

Ausgabe

T created 
T created 
T created 
func-start 
0, 0, 0
func-end 
T destroyed 
T destroyed 
T destroyed 

Working Draft, Standard für Programmiersprache C ++ 12.07.2016:http: //www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pd

§ 5.2.2 Funktionsaufruf

§ 5.2.2

1 Ein Funktionsaufruf ist ein Postfix-Ausdruck, dem Klammern folgen, die eine möglicherweise leere, durch Kommas getrennte Liste von Initialisierungsklauseln enthalten, die die Argumente für die Funktion darstellen.

Aber kann eines von @ seT erstellt nach func-start?

Oder gibt es eine Möglichkeit, Argumente als g / r / l / x / pr-Wert zu übergeben, damit die Funktion gestartet wird, bevor das temporäre Objekt erstellt wird?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage