That is not correct. All you need is <
/ isless
. Take for example
julia> mutable struct Wrap
_::Int
end
julia> Base.isless(a::Wrap, b::Wrap) = isless(a._, b._)
julia> Wrap(3) == Wrap(3)
false
julia> issorted(map(Wrap, 1:10))
true
julia> issorted(map(Wrap, [1, 1, 1]))
true