Гарантирован ли порядок выполнения трех указанных ниже прокомментированных строк?
struct S
{
S() { /* called 1st */ }
~S() { /* called 3rd */ }
};
boost::shared_ptr<S> f()
{
return boost::shared_ptr<S>(new S);
}
int second() { return 0; /* called 2nd */ }
int test()
{
return (f(), second());
}
С моим компилятором shared_ptr
, возвращаемое f()
, кажется, сохраняется до тех пор, пока не будет вызван second()
.Но гарантируется ли это стандартом и, следовательно, другими компиляторами?