Current state of the world <https://godbolt.org/z/7vcdMdjTe>:

    char* p = nullptr;


    static_cast<void>(p < nullptr);                         // invalid

    static_cast<void>(std::less<>()(p, nullptr));           // valid on clang 12; invalid on gcc 11

    static_cast<void>(std::less<char*>()(p, nullptr));      // valid

    static_cast<void>(std::unique_ptr<char*>() < nullptr);  // valid

    static_cast<void>(std::shared_ptr<char*>() < nullptr);  // valid