Код: Выделить всё
std::moveФункция Код: Выделить всё
[[msvc::intrinsic]]Атрибут Код: Выделить всё
/std:c++latestТо есть время жизни временного объекта продлевается, но в принципе вызов функции перемещения имеет возврат, не может быть продлен.
Я попробовал стандартную опцию переключения, но получилось то же самое.
Вот демо, которое я написал, заменив
Код: Выделить всё
std::moveКод: Выделить всё
[[msvc::intrinsic]]атрибуты Я хочу знать, что делает это свойство и почему msvc устроен таким образом.
Код: Выделить всё
#include
struct A{
~A() { puts(__FUNCTION__); }
};
template //Added an attribute, behavior equivalent to std::move in /std:c++latest, non-standard, extended lifetime
[[msvc::intrinsic]] constexpr std::remove_reference_t&& mmove(Ty&& Arg) noexcept {
return static_cast(Arg);
}
template
constexpr std::remove_reference_t&& nmove(Ty&& Arg) noexcept {
return static_cast(Arg);
}
int main()
{
{
A&& rvalue = mmove(A{});
puts(__FUNCTION__);
}
puts("------");
{
A&& rvalue = nmove(A{});
puts(__FUNCTION__);
}
}
Я с нетерпением жду подробного объяснения свойств '[[msvc::intrinsic]]'.>
Мобильная версия