Customization point objects are semiregular function objects (by definition) that handles constraint ADL dispatch.

A customization point object looks like the following:

namespace detail {
    template<class A, class B>
    void swap_helper(A& a, B& b) {
        using std::swap;
        swap(a, b);
    }
}
 
inline constexpr auto swap =
    []<A, B>(A& a, B& b)
        requires Swappable<A> && Swappable<B>
    {
        return detail::swap_helper(a, b);
    };

Read More