1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===// 2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// The LLVM Compiler Infrastructure 4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===// 9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// <functional> 11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 12c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// template<CopyConstructible Fn, CopyConstructible... Types> 13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// unspecified bind(Fn, Types...); 14c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// template<Returnable R, CopyConstructible Fn, CopyConstructible... Types> 15c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// unspecified bind(Fn, Types...); 16c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 17c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <stdio.h> 18c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 19c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <functional> 20c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <cassert> 21c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 22c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint count = 0; 23c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 24c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 1 arg, return void 25c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 26c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid f_void_1(int i) 27c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 28c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant count += i; 29c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 30c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 31c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct A_void_1 32c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 33c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void operator()(int i) 34c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 35c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant count += i; 36c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 37c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 38c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void mem1() {++count;} 39c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void mem2() const {count += 2;} 40c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}; 41c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 42c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid 43c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttest_void_1() 44c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 45c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant using namespace std::placeholders; 46c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int save_count = count; 47c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // function 48c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 49c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 2; 50c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(f_void_1, _1)(i); 51c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count + 2); 52c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 53c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 54c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 55c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 2; 56c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(f_void_1, i)(); 57c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count + 2); 58c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 59c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 60c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // function pointer 61c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 62c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void (*fp)(int) = f_void_1; 63c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 3; 64c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, _1)(i); 65c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+3); 66c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 67c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 68c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 69c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void (*fp)(int) = f_void_1; 70c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 3; 71c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, i)(); 72c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+3); 73c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 74c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 75c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // functor 76c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 77c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1 a0; 78c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 4; 79c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(a0, _1)(i); 80c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+4); 81c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 82c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 83c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 84c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1 a0; 85c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 4; 86c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(a0, i)(); 87c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+4); 88c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 89c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 90c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // member function pointer 91c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 92c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void (A_void_1::*fp)() = &A_void_1::mem1; 93c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1 a; 94c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, _1)(a); 95c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+1); 96c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 97c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1* ap = &a; 98c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, _1)(ap); 99c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+1); 100c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 101c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 102c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 103c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void (A_void_1::*fp)() = &A_void_1::mem1; 104c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1 a; 105c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, a)(); 106c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+1); 107c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 108c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1* ap = &a; 109c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, ap)(); 110c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+1); 111c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 112c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 113c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // const member function pointer 114c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 115c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void (A_void_1::*fp)() const = &A_void_1::mem2; 116c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1 a; 117c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, _1)(a); 118c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+2); 119c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 120c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1* ap = &a; 121c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, _1)(ap); 122c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+2); 123c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 124c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 125c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 126c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void (A_void_1::*fp)() const = &A_void_1::mem2; 127c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1 a; 128c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, a)(); 129c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+2); 130c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 131c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_void_1* ap = &a; 132c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(fp, ap)(); 133c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+2); 134c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 135c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 136c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 137c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 138c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 1 arg, return int 139c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 140c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint f_int_1(int i) 141c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 142c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant return i + 1; 143c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 144c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 145c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct A_int_1 146c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 147c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_int_1() : data_(5) {} 148c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int operator()(int i) 149c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 150c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant return i - 1; 151c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 152c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 153c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int mem1() {return 3;} 154c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int mem2() const {return 4;} 155c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int data_; 156c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}; 157c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 158c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid 159c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttest_int_1() 160c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 161c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant using namespace std::placeholders; 162c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // function 163c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 164c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 2; 165c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(f_int_1, _1)(i) == 3); 166c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(f_int_1, i)() == 3); 167c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 168c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // function pointer 169c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 170c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int (*fp)(int) = f_int_1; 171c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 3; 172c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(fp, _1)(i) == 4); 173c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(fp, i)() == 4); 174c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 175c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // functor 176c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 177c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 4; 178c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(A_int_1(), _1)(i) == 3); 179c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(A_int_1(), i)() == 3); 180c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 181c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // member function pointer 182c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 183c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_int_1 a; 184c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem1, _1)(a) == 3); 185c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem1, a)() == 3); 186c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_int_1* ap = &a; 187c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem1, _1)(ap) == 3); 188c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem1, ap)() == 3); 189c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 190c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // const member function pointer 191c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 192c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_int_1 a; 193c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem2, _1)(A_int_1()) == 4); 194c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem2, A_int_1())() == 4); 195c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_int_1* ap = &a; 196c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem2, _1)(ap) == 4); 197c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::mem2, ap)() == 4); 198c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 199c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // member data pointer 200c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 201c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_int_1 a; 202c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::data_, _1)(a) == 5); 203c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::data_, a)() == 5); 204c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant A_int_1* ap = &a; 205c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::data_, _1)(a) == 5); 206c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(&A_int_1::data_, _1)(a) = 6; 207c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::data_, _1)(a) == 6); 208c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::data_, _1)(ap) == 6); 209c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(&A_int_1::data_, _1)(ap) = 7; 210c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(std::bind(&A_int_1::data_, _1)(ap) == 7); 211c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 212c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 213c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 214c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 2 arg, return void 215c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 216c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid f_void_2(int i, int j) 217c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 218c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant count += i+j; 219c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 220c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 221c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct A_void_2 222c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 223c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void operator()(int i, int j) 224c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 225c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant count += i+j; 226c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 227c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 228c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void mem1(int i) {count += i;} 229c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant void mem2(int i) const {count += i;} 230c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}; 231c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 232c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid 233c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnanttest_void_2() 234c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 235c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant using namespace std::placeholders; 236c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int save_count = count; 237c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // function 238c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 239c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int i = 2; 240c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int j = 3; 241c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(f_void_2, _1, _2)(i, j); 242c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+5); 243c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 244c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(f_void_2, i, _1)(j); 245c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+5); 246c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 247c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(f_void_2, i, j)(); 248c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+5); 249c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 250c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 251c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant // member function pointer 252c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant { 253c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant int j = 3; 254c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(&A_void_2::mem1, _1, _2)(A_void_2(), j); 255c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+3); 256c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 257c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant std::bind(&A_void_2::mem1, _2, _1)(j, A_void_2()); 258c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant assert(count == save_count+3); 259c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant save_count = count; 260c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant } 261c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 262c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 2636287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnantstruct TFENode 2646287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant{ 2656287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant bool foo(unsigned long long) const 2666287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant { 2676287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant return true; 2686287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant } 2696287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant}; 2706287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant 2716287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnantvoid 2726287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnanttest3() 2736287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant{ 2746287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant using namespace std; 2756287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant using namespace std::placeholders; 2766287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant const auto f = bind(&TFENode::foo, _1, 0UL); 2776287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant const TFENode n = TFENode{}; 2786287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant bool b = f(n); 2796287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant} 2806287c65a0316f92f8d784e56ddb623642f1517daHoward Hinnant 281c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint main() 282c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 283c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant test_void_1(); 284c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant test_int_1(); 2850148a838d09499a457ee2dbd07e5573711e7f32eHoward Hinnant test_void_2(); 286c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 287