O C ++ 11 padrão garante que o objeto temporário passado para uma função tenha sido criado antes da chamada da função?

O padrão C ++ 11 garante que todos os 3 objetos temporários foram criados antes do início da execução da função?

Mesmo se o objeto temporário passou como:

objetorvalue-referencepassou apenas membro do objeto temporário

http://ideone.com/EV0hSP

#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;
}

Resultado:

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

Rascunho de trabalho, padrão para a linguagem de programação C ++ 12/07/2016:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf

§ 5.2.2 Chamada de função

§ 5.2.2

1 Uma chamada de função é uma expressão postfix seguida por parênteses que contêm uma lista possivelmente vazia, separada por vírgulas, de cláusulas de inicializador que constituem os argumentos para a função.

Mas pode ser qualquer umT criado depois defunc-start?

Ou existe alguma maneira de passar argumentos como valor de g / r / l / x / pr para que a função inicie antes da criação do objeto temporário?

questionAnswers(2)

yourAnswerToTheQuestion