Вы присваиваете временное значение для ссылки.Это временно, потому что здесь Bar()
действует как функция, которая возвращает экземпляр Bar
, который испарится в области видимости и в выражении, которая находится здесь в конце строки.Это очень опасно и незаконно, потому что разыменование foo
создает неопределенное поведение.Я понятия не имею, почему MSVC ++ допускает эту «особенность», которая должна быть серьезной ошибкой.
С уровнем предупреждения 4 (/ W4) вы получите
warning C4239: nonstandard extension used : 'initializing' : conversion from 'Bar' to 'Bar &'
Вы всегда должны писать код суровень предупреждения 4.
Наконец, ответ @ KerrekSB лучше моего, вы должны выбрать его 'в качестве ответа.