Почему unique_ptr не равенство_comparable_with nullptr_t в C++20?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему unique_ptr не равенство_comparable_with nullptr_t в C++20?

Сообщение Anonymous »

Работая с концепцией C++20, я заметил, что std::unique_ptr не соответствует концепции std::equality_comparable_with. Судя по определению std::unique_ptr, в C++20 он должен реализовать следующее:

Код: Выделить всё

template
bool operator==(const unique_ptr& x, const unique_ptr& y);

template 
bool operator==(const unique_ptr& x, std::nullptr_t) noexcept;
Это требование должно реализовать симметричное сравнение с nullptr, чего, насколько я понимаю, достаточно для удовлетворения равенства_comparable_with.
Любопытно, что эта проблема наблюдается во всех основных компиляторах. Следующий код отклонен в Clang, GCC и MSVC:

Код: Выделить всё

// fails on all three compilers
static_assert(std::equality_comparable_with);
Попробуйте онлайн
Однако то же утверждение с std::shared_ptr принимается:

Код: Выделить всё

// succeeds on all three compilers
static_assert(std::equality_comparable_with);
Попробуйте онлайн
Если я чего-то не понимаю, это похоже на ошибку.
Мой вопрос: является ли это случайной ошибкой в трех реализациях компилятора или это дефект стандарта C++20?
Примечание: Я помечаю это language-lawyer на случай, если это окажется дефектом.

Подробнее здесь: https://stackoverflow.com/questions/669 ... r-t-in-c20
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»