| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef TEST_COMPARE_H |
| #define TEST_COMPARE_H |
| |
| #include <cstddef> |
| #include <type_traits> |
| #include <cstdlib> |
| #include <new> |
| #include <climits> |
| |
| template <class C> |
| class test_compare |
| : private C |
| { |
| int data_; |
| public: |
| explicit test_compare(int data = 0) : data_(data) {} |
| |
| typename C::result_type |
| operator()(typename std::add_lvalue_reference<const typename C::first_argument_type>::type x, |
| typename std::add_lvalue_reference<const typename C::second_argument_type>::type y) const |
| {return C::operator()(x, y);} |
| |
| bool operator==(const test_compare& c) const |
| {return data_ == c.data_;} |
| }; |
| |
| |
| template <class C> |
| class non_const_compare |
| { |
| // operator() deliberately not marked as 'const' |
| bool operator()(const C& x, const C& y) { return x < y; } |
| }; |
| |
| |
| #endif // TEST_COMPARE_H |