Ответ 1
Значение должно быть rvalue, но webcompiler работает с Visual Studio, а Visual Studio имеет расширение которое позволяет связать временные объекты с неконстантными ссылками lvalue. ошибка/расширение, которое вызывает его при генерации lvalue в этом случае Как указывает Игорь, выше можно отключить с помощью /Za
(посмотреть его в прямом эфире).
Мы можем видеть, что это должно быть rvalue (в частности, prvalue) из черновика стандартного раздела С++ 5.4
Явное преобразование типа (литая нотация), пункт 1, в котором говорится (выделено мной):
Результат выражения (T) выражения-выражения имеет тип T. результатом является lvalue, если T - ссылочный тип lvalue или rvalue ссылка на тип функции и значение x, если T является ссылкой на rvalue к типу объекта; в противном случае результат будет prvalue. [Примечание: если T тип неклассов, имеющий квалификацию cv, cv-квалификаторы игнорируются при определении типа возвращаемого значения; см. 3.10. -конец примечание]
Оба gcc и clang приводят к значению rvalue который является ожидаемым результатом.
В стороне, я бы рекомендовал использовать rextester через webcompiler, поскольку рекстестер позволяет вам делиться своей программой, а также осуществлять совместное использование в реальном времени.
Обновить
Бен Фойгт отметьте этот отчет об ошибке, и поэтому кажется, что Visual Studio фактически производит lvalue. Таким образом, это не просто случай расширения который позволяет связать временные объекты с неконстантными ссылками l.
Как указывает dyp gcc также используется для добавления в lvalue extension.
Обновление 2
Mgetz подал сообщение об ошибке ответ был тот, что это исправлено с помощью /Zc: флаг rvalueCast, описание флага выглядит следующим образом:
Когда задана опция /Zc: rvalueCast, компилятор правильно идентифицирует ссылочный тип rvalue в результате операции литья в соответствии со стандартом С++ 11. Когда опция не указано, что поведение компилятора такое же, как в Visual Studio 2012. По умолчанию /Zc: rvalueCast выключен. Для соответствия и устранения ошибки при использовании бросков, мы рекомендуем использовать /Zc: rvalueCast.
Неясно, будет ли этот флаг включен по умолчанию в будущих версиях.