brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · d212f36 Raw
69 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <functional>10 11 12//  In C++17, the function adapters mem_fun/mem_fun_ref, etc have been removed.13//  However, for backwards compatibility, if _LIBCPP_ENABLE_CXX17_REMOVED_BINDERS14//  is defined before including <functional>, then they will be restored.15 16// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS17// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS18 19#include <functional>20#include <cassert>21#include <type_traits>22 23#include "test_macros.h"24 25int identity(int v) { return v; }26int sum(int a, int b) { return a + b; }27 28struct Foo {29  int zero() { return 0; }30  int zero_const() const { return 1; }31 32  int identity(int v) const { return v; }33  int sum(int a, int b) const { return a + b; }34};35 36int main(int, char**)37{38    typedef std::pointer_to_unary_function<int, int> PUF;39    typedef std::pointer_to_binary_function<int, int, int> PBF;40 41    static_assert(42        (std::is_same<PUF, decltype((std::ptr_fun<int, int>(identity)))>::value),43        "");44    static_assert(45        (std::is_same<PBF, decltype((std::ptr_fun<int, int, int>(sum)))>::value),46        "");47 48    assert((std::ptr_fun<int, int>(identity)(4) == 4));49    assert((std::ptr_fun<int, int, int>(sum)(4, 5) == 9));50 51    Foo f;52    assert((std::mem_fn(&Foo::identity)(f, 5) == 5));53    assert((std::mem_fn(&Foo::sum)(f, 5, 6) == 11));54 55    typedef std::mem_fun_ref_t<int, Foo> MFR;56    typedef std::const_mem_fun_ref_t<int, Foo> CMFR;57 58    static_assert(59        (std::is_same<MFR, decltype((std::mem_fun_ref(&Foo::zero)))>::value), "");60    static_assert((std::is_same<CMFR, decltype((std::mem_fun_ref(61                                          &Foo::zero_const)))>::value),62                  "");63 64    assert((std::mem_fun_ref(&Foo::zero)(f) == 0));65    assert((std::mem_fun_ref(&Foo::identity)(f, 5) == 5));66 67  return 0;68}69