Код: Выделить всё
template
bool operator==(const unique_ptr& x, const unique_ptr& y);
template
bool operator==(const unique_ptr& x, std::nullptr_t) noexcept;
Любопытно, что эта проблема наблюдается во всех основных компиляторах. Следующий код отклонен в 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
Мобильная версия