/* * Copyright (C) 2020-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include template concept Disposer = requires (Func f, T* val) { { f(val) } noexcept -> std::same_as; }; template concept LessComparable = requires (const Key1& a, const Key2& b, Less less) { { less(a, b) } -> std::same_as; { less(b, a) } -> std::same_as; }; template concept LessNothrowComparable = LessComparable && std::is_nothrow_invocable_v; template concept Comparable = requires (const T1& a, const T2& b, Compare cmp) { // The Comparable is trichotomic comparator that should return // negative value when a < b // zero when a == b // positive value when a > b { cmp(a, b) } -> std::same_as; };