Подтвердить что ты не робот

С++: правильно ли проигнорировано поведение разрушения возвращаемого значения

Вопрос: Является ли проигнорированное возвращаемое значение разрушенным немедленно или в момент выхода из области видимости.?

Ниже приведен код для моего компилятора

Вывод:

Кто это делает, не нуждается в этом.

Кто покупает его, не имеет никакого смысла.

Кто его использует, он не видит и не чувствует.

Что это?

Поэтому игнорируемое значение немедленно разрушается. Но является ли этот компилятор конкретным или стандартным поведением?

struct foo
{
   ~foo()
   {
      std::cout << "Who makes it, has no need of it. \n"
                << "Who buys it, has no use for it. \n";
   }
}

foo createFoo()
{
   return foo();
}

int main(int argc, char* argv[])
{
     createFoo();
     std::cout << "Who uses it can neither see nor feel it.\n"
               << "What is it?"; 
}
4b9b3361

Ответ 1

Возвращаемое временное время уничтожается сразу же после завершения полного выражения, за исключением того, что его время жизни расширяется за счет привязки к значению rvalue или const lvalue.

Ответ 2

В стандарте 5.11 есть

В некоторых контекстах выражение появляется только для его побочных эффектов. Такое выражение называется отброшенным значением выражение. Выражение оценивается и его значение отбрасывается.

Итак, когда выражение заканчивается, значение затем отбрасывается и, если это тип класса, вызывается деструктор.

Ответ 3

§12.2/3

Временные объекты уничтожаются как последний шаг при оценке полного выражения (1.9), который (лексически) содержит точку, в которой они были созданы. Это справедливо, даже если эта оценка заканчивается выбросом исключения. Вычисления стоимости и побочные эффекты разрушения временный объект связан только с полным выражением, а не с каким-либо конкретным подвыражением.

Исключения для аргументов конструктора и привязки ссылок на временные. (§12.3/4f.)