Убедитесь, что operator <
не перегружен где-то в вашей базе кода. Кажется, это единственный способ, которым (p < 0)
может быть true
.
Пример:
bool operator< (const std::unique_ptr<uint8_t[]>&, int) { return true; }
int main() {
std::unique_ptr<uint8_t[]> p;
std::cout << (p < 0) << std::endl;
}
Отпечатки:
1
живая демонстрация
В противном случае, как уже говорили другие, 0
неявно преобразуется в std::nullptr_t
, что выберет перегрузку bool operator<(const unique_ptr<T, D>& x, nullptr_t)
, которая вызовет std::less(p, 0)
, который вернет false
(даже на * 1023) * со значением указателя -1
).