Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/tr1/test/test_function.cpp @ 44

Last change on this file since 44 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 2.2 KB
Line 
1//  (C) Copyright John Maddock 2005.
2//  Use, modification and distribution are subject to the
3//  Boost Software License, Version 1.0. (See accompanying file
4//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#ifdef TEST_STD_HEADERS
7#include <functional>
8#else
9#include <boost/tr1/functional.hpp>
10#endif
11
12#include <boost/static_assert.hpp>
13#include <boost/type_traits/is_base_and_derived.hpp>
14#include "verify_return.hpp"
15
16struct test_functor
17{
18   int operator()()const;
19   long operator()(int)const;
20   double operator()(int, char)const;
21};
22
23void nothing(){}
24
25template <class Func>
26void test_function(Func*)
27{
28   typedef typename Func::result_type result_type;
29   
30   test_functor t;
31   Func f1;
32   Func f2(0);
33   Func f3(f1);
34   Func f4(t);
35
36   f2 = f1;
37   f2 = 0;
38   f2 = t;
39   f2 = std::tr1::ref(t);
40   f2 = std::tr1::cref(t);
41   const Func& cf = f1;
42
43   std::tr1::swap(f1, f2);
44   if(cf) nothing();
45   if(cf && f2) nothing();
46   if(cf || f2) nothing();
47   if(f2 && !cf) nothing();
48
49   //const std::type_info& info = cf.target_type();
50   test_functor* func1 = f1.template target<test_functor>();
51   const test_functor* func2 = cf.template target<test_functor>();
52
53   // comparison with null:
54   if(0 == f1) nothing();
55   if(0 != f1) nothing();
56   if(f2 == 0) nothing();
57   if(f2 != 0) nothing();
58}
59
60
61int main()
62{
63   BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::exception, std::tr1::bad_function_call>::value));
64   std::tr1::bad_function_call fe;
65
66   test_function(static_cast<std::tr1::function<int (void)>* >(0));
67   test_function(static_cast<std::tr1::function<long (int)>* >(0));
68   test_function(static_cast<std::tr1::function<double (int,char)>* >(0));
69
70   std::tr1::function<int (void)> f1;
71   verify_return_type(f1(), int(0));
72   std::tr1::function<long (int)> f2;
73   verify_return_type(f2(0), long(0));
74   std::tr1::function<double (int, char)> f3;
75   verify_return_type(f3(0,0), double(0));
76
77   //BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::unary_function<int, long>, std::tr1::function<long (int)> >::value));
78   //BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::binary_function<int, char, double>, std::tr1::function<double (int,char)> >::value));
79   return 0;
80}
81
Note: See TracBrowser for help on using the repository browser.