LINUX.ORG.RU

Ответ на: комментарий от Deleted

Ящетаю, это баг в стандарте. Ведь с пользовательскими типами все работает (в большинстве своем) изза дефолтного T& operator=(T&&).

#include <type_traits>

struct T { T& operator=(T&&) = delete; /* kablamo, type_traits! */ };

int main() {
  return std::is_assignable_v<T, T>;
}

https://cppinsights.io/lnk?code=I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKc3RydWN0IFQgeyBUJiBvcGVyYXRvcj0gKFQmJikgPSBkZWxldGU7IH07CgppbnQgbWFpbigpIHsKICByZXR1cm4gc3RkOjppc19hc3NpZ25hYmxlX3Y8VCwgVD47Cn0K&insightsOptions=cpp17&std=cpp17&rev=1.0

KennyMinigun ★★★★★ ()
Последнее исправление: KennyMinigun (всего исправлений: 3)
Ответ на: комментарий от KennyMinigun

Тут просто различие в семантике присвоения: вот так должен выглядеть оператор присвоения, аналогичный таковому для встроенного типа - T& operator=(const T&) &(внимание на перегрузку по lvalue для this). Так наверное и для user-defined не сработает. Для перемещения тоже самое, КМК

Deleted ()
Последнее исправление: dllmain (всего исправлений: 1)