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