54 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#include <functional>12 13#include "test_macros.h"14 15struct Incomplete;16template<class T> struct Holder { T t; };17typedef Holder<Incomplete> *Ptr;18 19struct A {20 Ptr no_args() const { return nullptr; }21 Ptr one_arg(Ptr p) const { return p; }22 void one_arg_void(Ptr) const { }23};24 25int main(int, char**)26{27 A a;28 A *pa = &a;29 const A *cpa = &a;30 Ptr x = nullptr;31 const Ptr cx = nullptr;32 std::mem_fn(&A::no_args)(a);33 std::mem_fn(&A::no_args)(pa);34 std::mem_fn(&A::no_args)(*cpa);35 std::mem_fn(&A::no_args)(cpa);36 std::mem_fn(&A::one_arg)(a, x);37 std::mem_fn(&A::one_arg)(pa, x);38 std::mem_fn(&A::one_arg)(a, cx);39 std::mem_fn(&A::one_arg)(pa, cx);40 std::mem_fn(&A::one_arg)(*cpa, x);41 std::mem_fn(&A::one_arg)(cpa, x);42 std::mem_fn(&A::one_arg)(*cpa, cx);43 std::mem_fn(&A::one_arg)(cpa, cx);44 std::mem_fn(&A::one_arg_void)(a, x);45 std::mem_fn(&A::one_arg_void)(pa, x);46 std::mem_fn(&A::one_arg_void)(a, cx);47 std::mem_fn(&A::one_arg_void)(pa, cx);48 std::mem_fn(&A::one_arg_void)(*cpa, x);49 std::mem_fn(&A::one_arg_void)(cpa, x);50 std::mem_fn(&A::one_arg_void)(*cpa, cx);51 std::mem_fn(&A::one_arg_void)(cpa, cx);52 return 0;53}54