| // (C) Copyright John Maddock 2001. |
| // (C) Copyright Aleksey Gurtovoy 2003. |
| // (C) Copyright Alisdair Meredith 2006. |
| // Use, modification and distribution are subject to the |
| // Boost Software License, Version 1.0. (See accompanying file |
| // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| |
| // See http://www.boost.org/libs/config for most recent version. |
| |
| // MACRO: BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS |
| // TITLE: template specialisations of function types |
| // DESCRIPTION: If the compiler cannot handle template specialisations |
| // for function types |
| |
| |
| namespace boost_no_function_type_specializations{ |
| |
| template< typename T > struct is_function |
| { |
| }; |
| |
| struct X {}; |
| enum Y { value }; |
| |
| // Tesst can declare specializations |
| typedef is_function< int( int ) > scalar_types; |
| typedef is_function< X( X ) > user_defined_type; |
| typedef is_function< int( Y ) > check_enum; |
| typedef is_function< X( X, int ) > multiple_arguments; |
| |
| // Partial specialization test |
| // confirm const, volatile, pointers and references in args |
| template< typename X, typename Y, typename Z > |
| struct is_function< X( Y const &, volatile Z * ) > |
| { |
| }; |
| |
| |
| int test() |
| { |
| return 0; |
| } |
| |
| } |