Назначение неконстантной ссылки

108
8

VS2015 Update 3 компилирует это без ошибок и без предупреждения. Тем не менее у меня создалось впечатление, что временные лица могут быть связаны только со ссылками на константы. Является ли это несоответствием или я что-то не понимаю?


struct Foo {};
Foo Func6() { return Foo(); }

TEST(Arguments, NonConstReference)
{
Foo& bob = Func6();
}


ИЗМЕНИТЬ


Вопрос, связанный с marcinj, является той же проблемой, хотя этот вопрос не относится конкретно к VS2015 и не был расположен, когда я набрал его.


Я тестировал с помощью /W 4, чтобы узнать, получил ли я предупреждение и не видел его, но проверяю его снова. Я нахожу это сейчас. При открытии свойств проекта для настройки параметров VS2015 имеет привычку показывать диалог свойств, заданный для другой конфигурации сборки, чем выбранный в данный момент, самое бесполезное поведение, которое меня много раз поймало (и я уверен, что продолжу для этого).


Как упоминается в этом другом вопросе с использованием запрещенных языковых расширений (/Za), эта ошибка является ошибкой, но, к сожалению, не является подходящим решением, так как компиляция собственных заголовков Microsoft не будет компилироваться.

спросил(а) 2021-01-25T15:53:13+03:00 4 месяца, 4 недели назад
1
Решение
125

Компилятор MSVC имеет нестандартное расширение, включенное по умолчанию, которое позволяет временным связям с ссылками const. Чтобы отключить это, используйте параметр командной строки /Za или соответствующее свойство проекта.

ответил(а) 2021-01-25T15:53:13+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема