1 // Boost.Function library
2 //  Copyright (C) Douglas Gregor 2008
3 //
4 //  Use, modification and distribution is subject to the Boost
5 //  Software License, Version 1.0.  (See accompanying file
6 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // For more information, see http://www.boost.org
9 #ifndef BOOST_FUNCTION_FWD_HPP
10 #define BOOST_FUNCTION_FWD_HPP
11 #include <boost/config.hpp>
12 
13 #if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
14 // Work around a compiler bug.
15 // boost::python::objects::function has to be seen by the compiler before the
16 // boost::function class template.
17 namespace boost { namespace python { namespace objects {
18   class function;
19 }}}
20 #endif
21 
22 #if defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)                         \
23  || !(defined(BOOST_STRICT_CONFIG) || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
24 #  define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
25 #endif
26 
27 namespace boost {
28   class bad_function_call;
29 
30 #if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
31   // Preferred syntax
32   template<typename Signature> class function;
33 
34   template<typename Signature>
swap(function<Signature> & f1,function<Signature> & f2)35   inline void swap(function<Signature>& f1, function<Signature>& f2)
36   {
37     f1.swap(f2);
38   }
39 #endif // have partial specialization
40 
41   // Portable syntax
42   template<typename R> class function0;
43   template<typename R, typename T1> class function1;
44   template<typename R, typename T1, typename T2> class function2;
45   template<typename R, typename T1, typename T2, typename T3> class function3;
46   template<typename R, typename T1, typename T2, typename T3, typename T4>
47     class function4;
48   template<typename R, typename T1, typename T2, typename T3, typename T4,
49            typename T5>
50     class function5;
51   template<typename R, typename T1, typename T2, typename T3, typename T4,
52            typename T5, typename T6>
53     class function6;
54   template<typename R, typename T1, typename T2, typename T3, typename T4,
55            typename T5, typename T6, typename T7>
56     class function7;
57   template<typename R, typename T1, typename T2, typename T3, typename T4,
58            typename T5, typename T6, typename T7, typename T8>
59     class function8;
60   template<typename R, typename T1, typename T2, typename T3, typename T4,
61            typename T5, typename T6, typename T7, typename T8, typename T9>
62     class function9;
63   template<typename R, typename T1, typename T2, typename T3, typename T4,
64            typename T5, typename T6, typename T7, typename T8, typename T9,
65            typename T10>
66     class function10;
67 }
68 
69 #endif
70