С учетом следующего кода:
#include <string>
void foo()
{
std::string s(std::move(""));
}
Это компиляция с яблочным clang (xcode 7) и не с визуальной студией 2015, которая генерирует следующую ошибку:
error C2440: 'return': cannot convert from 'const char [1]' to 'const char (&&)[1]'
note: You cannot bind an lvalue to an rvalue reference
main.cpp(4): note: see reference to function template instantiation 'const char (&&std::move<const char(&)[1]>(_Ty) noexcept)[1]' being compiled
with
[
_Ty=const char (&)[1]
]
Игнорируя на тот момент, что перемещение является избыточным, какая стандартная реализация библиотеки является более правильной в этом случае?
Я чувствую, что тип ""
равен const char[1]
, поэтому std::move
должен возвращать std::remove_reference<const char[1]&>::type&&
, который будет const char[1]&&
.
Мне кажется, что это должно распадаться на const char*
.
Или я неправильно понимаю правила?