Скопировать конструктор elision? [Дубликат]

Возможный дубликат:
Почему деструктор был вызван только один раз?

Учитывая код ниже, я не понимаю вывод в gcc. Я ожидаю, что два объекта будут созданы и уничтожены, но вместо этого я вижу только один вызов конструктора и деструктора. Что тут происходит?

#include <string>
#include <iostream>

struct Huge{
        Huge() { std::cout << "Constructor" << std::endl; }
        Huge(Huge const &r) { std::cout << "Copy Constructor" << std::endl; }
        ~Huge() { std::cout << "Destructor" << std::endl; }
};

Huge g() {
        std::cout << "Entering g" << std::endl;
        Huge temp;
        std::cout << "Exiting g" << std::endl;
        return temp;
}

int main(){
        Huge h2(g());
        std::cout << "Before leaving main" << std::endl;
}

Вывод этого кода в g ++ (4.4)

Ввод г

Конструктор

Выход г

Перед выходом из основного

Destructor

Ответы на вопрос(2)

Ваш ответ на вопрос