Здравствуйте, ollv, Вы писали:
BFE>>Сигфолта не будет, т.к. не скомпилируется. O>Да на gcc compile rvalue не ляжет в ссылку. просто майкрософт ведет себя вероломно. Т/к/ он мало того, что компилирует, так еще и без ворнингов (с настройками по умолчанию). Его конечно можно нагнуть, чтобы такое не компилировалось но это опасности не отменяет.
В чём опасность? Такой код компилируется и работает у Майкрософта более 15-ти лет, ещё до принятия стандарта 2011-ого года, до move семантики. То, что это не по стандарту — это проблемы стандарта, а не кода.
O>+ к тому есть продление жизни для ссылок — тоже опасное поведение, с такими трюками можно легко запутаться особенно присутствуют сложные вычисления типов
Здесь нет продления жизни для ссылок.
O>В общем, я могу сказать одно, я такие практики оч не поддерживаю.
Никакой особой практики я тут не вижу. Это довольно редкий случай, как правило порождаемый при переиспользовании кода в ситуациях не предвиденных изначально.
O>такое скомпилируется и может даже имеет какой-то смысл. Но изначально — r& fun(type& v) { return v; } O>я пытаюсь избегать, именно по причине того, что майкрософт ведет себя вероломно.