1// Copyright (C) 2005-2015 Free Software Foundation, Inc. 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 20.3.6 Binders 19 20// { dg-do compile } 21 22#include <functional> 23using namespace std; 24 25struct s 26{ 27 void f_void_int_const(int) const {} 28 void f_void_int(int) {} 29 int f_int_int_const(int) const { return 1; } 30 int f_int_int(int) {return 1; } 31 void f_void_void_const() const {} 32 void f_void_void() {} 33 int f_int_void_const() const { return 1; } 34 int f_int_void() { return 1; } 35}; 36 37void test01(s& a) 38{ 39 mem_fun_t<void, s> p1(&s::f_void_void); 40 mem_fun_t<int, s> p2(&s::f_int_void); 41 p1(&a); 42 p2(&a); 43 mem_fun1_t<void, s, int> q1(&s::f_void_int); 44 mem_fun1_t<int, s, int> q2(&s::f_int_int); 45 q1(&a,0); 46 q2(&a,0); 47 48 (mem_fun(&s::f_void_void))(&a); 49 (mem_fun(&s::f_void_int))(&a,0); 50 (mem_fun(&s::f_int_void))(&a); 51 (mem_fun(&s::f_int_int))(&a,0); 52 53 mem_fun_ref_t<void, s> ref1(&s::f_void_void); 54 mem_fun_ref_t<int, s> ref2(&s::f_int_void); 55 56 ref1(a); 57 ref2(a); 58 59 mem_fun1_ref_t<void, s, int> ref3(&s::f_void_int); 60 mem_fun1_ref_t<int, s, int> ref4(&s::f_int_int); 61 62 ref3(a,0); 63 ref4(a,0); 64 65 (mem_fun_ref(&s::f_void_void))(a); 66 (mem_fun_ref(&s::f_void_int))(a, 0); 67 (mem_fun_ref(&s::f_int_void))(a); 68 (mem_fun_ref(&s::f_int_int))(a, 0); 69} 70 71void test02(const s& a) 72{ 73 const_mem_fun_t<void, s> p1(&s::f_void_void_const); 74 const_mem_fun_t<int, s> p2(&s::f_int_void_const); 75 p1(&a); 76 p2(&a); 77 const_mem_fun1_t<void, s, int> q1(&s::f_void_int_const); 78 const_mem_fun1_t<int, s, int> q2(&s::f_int_int_const); 79 q1(&a,0); 80 q2(&a,0); 81 82 (mem_fun(&s::f_void_void_const))(&a); 83 (mem_fun(&s::f_void_int_const))(&a, 0); 84 (mem_fun(&s::f_int_void_const))(&a); 85 (mem_fun(&s::f_int_int_const))(&a, 0); 86 87 const_mem_fun_ref_t<void, s> ref1(&s::f_void_void_const); 88 const_mem_fun_ref_t<int, s> ref2(&s::f_int_void_const); 89 90 ref1(a); 91 ref2(a); 92 93 const_mem_fun1_ref_t<void, s, int> ref3(&s::f_void_int_const); 94 const_mem_fun1_ref_t<int, s, int> ref4(&s::f_int_int_const); 95 96 ref3(a,0); 97 ref4(a,0); 98 99 (mem_fun_ref(&s::f_void_void_const))(a); 100 (mem_fun_ref(&s::f_void_int_const))(a, 0); 101 (mem_fun_ref(&s::f_int_void_const))(a); 102 (mem_fun_ref(&s::f_int_int_const))(a, 0); 103} 104