Visual Studio не создает временный объект при приведении типов?

Я использую Visual Studio Express 2013 и немного дурачусь, пытаясь узнать о разных вещах в C ++.

Я наткнулся на интересную ошибку в компиляторе, когда кажется, что он не создает временный объект при явном приведении типа к тому же типу, что и ссылка.

#include <iostream>

using namespace std;

int main()
{
    int number; // float number;
    number = 2;

    const int& plainref_i = number;
    const int& recastref_i = (int)number; // this goes wrong if number is int
    const float& plainref_f = number;
    const float& recastref_f = (float)number; // this goes wrong if number is float

    number = 3;

    std::cout << plainref_i << "\n";
    std::cout << recastref_i << "\n";
    std::cout << plainref_f << "\n";
    std::cout << recastref_f << "\n";

    return 0;
}

При компиляции в VS это приводит к следующему выводу: 3 3 2 2

Но скомпилированный с gcc, приводит к следующему выводу: 3 2 2 2

Если я заменю "int number;" с "числом с плавающей точкой"; Я получаю в ВС: 2 2 3 3

и с gcc: 2 2 3 2

Мне интересно, может ли кто-нибудь подтвердить это как ошибку и знает ли кто-нибудь о возможном обходном пути / решении.

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

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