должен быть Rvalue но WebCompiler работает Visual Studio и Visual Studio имеет extension which allows temporary objects to be bound to non-const lvalue references.a bug/extension that casues it to generate an lvalue in this case Как указывает Игорь, это можно отключить, используя /Za
(see it live).
Мы можем видеть, что это должно быть Rvalue (конкретно prvalue) из проекта C++ стандартной секции 5.4
Явное преобразование типа (отливать обозначение) пункт который говорит (курсив мой) :
в результате выражения (Т) монолитно-выражение имеет типа Т. результата именующий если Т именующий ссылочный типа или Rvalue ссылка на тип функции и значение x, если T является ссылкой rvalue на тип объекта; В противном случае результатом будет prvalue. [Примечание: если T является неклассовым типом, который является cv-квалифицированным, cv-квалификаторы игнорируются при определении типа возвращаемого значения; см. 3.10. -end примечание]
gcc Как и clang результат в RValue который является ожидаемым результатом.
В качестве альтернативы, я бы рекомендовал использовать rextester над webcompiler, так как рекстестер позволяет вам делиться своей программой, а также осуществляет совместное использование.
Update
Бен Фойгт указывают эту bug report и поэтому кажется, что Visual Studio действительно производит именующее выражение. Так что это не просто случай extension which allows temporary objects to be bound to non-const lvalue references.
As dyp указывает gcc used to have a cast to lvalue extension также.
Обновление 2
Mgetz подал в bug report, ответ был, что это фиксируется с помощью /Zc:rvalueCast flag, описание флага заключается в следующем:
Когда/Zc: rvalueCast параметр указан, компилятор правильно идентифицирует ссылочный тип rvalue в результате операции литья в соответствии со стандартом C++ 11. Если указан параметр не , поведение компилятора такое же, как в Visual Studio 2012. По умолчанию/Zc: rvalueCast выключен. Для соответствия и устранения ошибок при использовании бросков мы рекомендуем использовать/Zc: rvalueCast.
Непонятно, будет ли этот флаг включен по умолчанию в будущих версиях.
Кто-нибудь проверил, есть ли еще ошибка [connect] (http://connect.microsoft.com)? Беглый поиск не перевернул. – Mgetz
@Mgetz Я искал, но я не нашел ничего очевидного. –
[Подано как дефект при подключении] (https://connect.microsoft.com/VisualStudio/feedback/details/1008261) против VS2013 с использованием тестового примера @ ShafikYaghmour – Mgetz