1// 2005-01-15 Douglas Gregor <dgregor@cs.indiana.edu> 2// 3// Copyright (C) 2005, 2009 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10// 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15// 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 3.7.2 polymorphic function object wrapper 21#include <tr1/functional> 22#include <testsuite_hooks.h> 23#include <testsuite_tr1.h> 24 25using namespace __gnu_test; 26 27bool test __attribute__((unused)) = true; 28 29// Put reference_wrappers to function pointers into function<> wrappers 30void test07() 31{ 32 using std::tr1::function; 33 using std::tr1::ref; 34 using std::tr1::cref; 35 36 int (*fptr)(float) = truncate_float; 37 38 function<int(float)> f1(ref(fptr)); 39 VERIFY( f1 ); 40 VERIFY( !!f1 ); 41 VERIFY( !(f1 == 0) ); 42 VERIFY( !(0 == f1) ); 43 VERIFY( f1 != 0 ); 44 VERIFY( 0 != f1 ); 45 46 // Invocation 47 VERIFY( f1(3.1f) == 3 ); 48 49 // target_type and target() functions 50 const function<int(float)>& f1c = f1; 51 VERIFY( typeid(int(*)(float)) == f1.target_type() ); 52 VERIFY( f1.target<int(*)(float)>() != 0 ); 53 VERIFY( f1.target<int(*)(float)>() == &fptr ); 54 VERIFY( f1c.target<int(*)(float)>() != 0 ); 55 VERIFY( f1c.target<int(*)(float)>() == &fptr ); 56 57 function<int(float)> f2(cref(fptr)); 58 VERIFY( f2 ); 59 VERIFY( !!f2 ); 60 VERIFY( !(f2 == 0) ); 61 VERIFY( !(0 == f2) ); 62 VERIFY( f2 != 0 ); 63 VERIFY( 0 != f2 ); 64 65 // Invocation 66 VERIFY( f2(3.1f) == 3 ); 67 68 // target_type and target() functions 69 const function<int(float)>& f2c = f2; 70 VERIFY( typeid(int(*)(float)) == f2.target_type() ); 71 VERIFY( f2.target<int(*)(float)>() == 0 ); 72 VERIFY( f2.target<int(* const)(float)>() == &fptr ); 73 VERIFY( f2c.target<int(*)(float)>() != 0 ); 74 VERIFY( f2c.target<int(*)(float)>() == &fptr ); 75} 76 77int main() 78{ 79 test07(); 80 return 0; 81} 82