Sospecho que el siguiente encadenamiento de funciones daría como resultado una secuencia no especificada de acuerdo con los estándares de C++ (suponga C++ 0x). Solo quiero una confirmación y si alguien puede dar una explicación, lo agradecería.¿Este código está bien definido?
#include <iostream>
struct TFoo
{
TFoo(int)
{
std::cout<<"TFoo"<<std::endl;
};
TFoo foobar1(int)
{
std::cout<<"foobar1"<<std::endl;
return *this;
};
TFoo foobar2(int)
{
std::cout<<"foobar2"<<std::endl;
return *this;
};
static int bar1()
{
std::cout<<"bar1"<<std::endl;
return 0;
};
static int bar2()
{
std::cout<<"bar2"<<std::endl;
return 0;
};
static int bar3()
{
std::cout<<"bar3"<<std::endl;
return 0;
}
};
int main(int argc, char *argv[])
{
// is the sequence well defined for bar1, bar2 and bar3?
TFoo(TFoo::bar1()).foobar1(TFoo::bar2()).foobar2(TFoo::bar3());
}
* edición: especificador __fastcall eliminado debido a que las funciones (no es necesario/relevante para la cuestión).
No me refiero a ser tan quisquilloso, pero hablando técnicamente '__fastcall' no es parte de la especificación de C++, así que no creo que la especificación tenga nada que decir al respecto. ¿Hay alguna razón por la que lo incluiste aquí? ¿O la pregunta es específicamente sobre la interacción de '__fastcall' con los puntos de secuencia? – templatetypedef