Я наткнулся на этот ответ " Запретить перемещение unique_ptr С++ 11". Тем не менее, при тестировании его на компиляторе в сети, это работает с С++ 11 (ошибка компилятора std::move
), но с С++ 17, я вижу, что std::move
ниже успешно. Разве компилятор не должен выдавать ошибку в этой строке? Также, если некоторая семантика изменилась в С++ 17, каков правильный способ создания неизменяемого unique_ptr в С++ 17 и далее.
template <typename T>
using scoped_ptr = const std::unique_ptr<T>;
int main()
{
auto p = scoped_ptr<int>(new int(5));
auto p2 = std::move(p); // should be error?
std::cout << *p2 << std::endl; // 5
return 0;
}
Вы можете попробовать это онлайн здесь.