Update of /cvsroot/boost/boost/libs/function_types/test/synthesis
In directory 
sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv18022/function_types/test/synthesis

Added Files:
        cv_function_synthesis.cpp function_pointer.cpp 
        function_reference.cpp function_type.cpp mem_func_ptr_cv1.cpp 
        mem_func_ptr_cv2.cpp mem_func_ptr_cv_ptr_to_this.cpp 
        member_function_pointer.cpp member_object_pointer.cpp 
        transformation.cpp variadic_function_synthesis.cpp 
Log Message:
libs/function_types/* - check-in


--- NEW FILE: cv_function_synthesis.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/type_traits/is_same.hpp>

#include <boost/function_types/function_type.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;

template<typename C, typename T>
void test_non_cv(T C::*)
{
  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::non_const,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_const >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_volatile >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::const_qualified,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::const_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::non_const,ft::volatile_qualified> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( 
    boost::is_same< 
      ft::function_type< mpl::vector<void,int>, ft::volatile_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::const_qualified,ft::volatile_qualified> >::type 
  , T 
  >));
}

template<typename C, typename T>
void test_c_non_v(T C::*)
{
  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::non_const,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_const >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_volatile >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::const_qualified,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::const_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::non_const,ft::volatile_qualified> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( 
    boost::is_same< 
      ft::function_type< mpl::vector<void,int>, ft::volatile_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::const_qualified,ft::volatile_qualified> >::type 
  , T 
  >));
}

template<typename C, typename T>
void test_v_non_c(T C::*)
{
  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::non_const,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_const >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_volatile >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::const_qualified,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::const_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::non_const,ft::volatile_qualified> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( 
    boost::is_same< 
      ft::function_type< mpl::vector<void,int>, ft::volatile_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::const_qualified,ft::volatile_qualified> >::type 
  , T 
  >));
}

template<typename C, typename T>
void test_cv(T C::*)
{
  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::non_const,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_const >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::non_volatile >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
        ft::tag<ft::const_qualified,ft::non_volatile> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, ft::const_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::non_const,ft::volatile_qualified> >::type 
  , T 
  >));

  BOOST_MPL_ASSERT_NOT(( 
    boost::is_same< 
      ft::function_type< mpl::vector<void,int>, ft::volatile_qualified >::type 
  , T 
  >));

  BOOST_MPL_ASSERT(( boost::is_same< 
    ft::function_type< mpl::vector<void,int>, 
       ft::tag<ft::const_qualified,ft::volatile_qualified> >::type 
  , T 
  >));
}


struct C
{
  void non_cv(int) { }
  void c_non_v(int) const { }
  void v_non_c(int) volatile { }
  void cv(int) const volatile { }
};

void instanitate()
{
  test_non_cv(& C::non_cv);
  test_c_non_v(& C::c_non_v);
  test_v_non_c(& C::v_non_c);
  test_cv(& C::cv);
}


--- NEW FILE: function_pointer.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/function_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;

using boost::is_same;

typedef int (* expected)(int,int);

BOOST_MPL_ASSERT((
  is_same< ft::function_pointer< mpl::vector<int,int,int> >::type, expected >
));


--- NEW FILE: function_reference.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/function_reference.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;

using boost::is_same;

typedef int (& expected)(int);

BOOST_MPL_ASSERT((
  is_same< ft::function_reference< mpl::vector<int,int> >::type, expected >
));


--- NEW FILE: function_type.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/function_type.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

typedef int expected(int,int);

BOOST_MPL_ASSERT((
  is_same< ft::function_type< mpl::vector<int,int,int> >::type, expected >
));


--- NEW FILE: mem_func_ptr_cv1.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/member_function_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

class C;

typedef int (C::* expected1)(int);
typedef int (C::* expected2)(int) const;
typedef int (C::* expected3)(int) volatile;
typedef int (C::* expected4)(int) const volatile;

// implicitly specified cv qualification

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int> >::type
         , expected1 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const,int> >::type
         , expected2 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< 
              mpl::vector<int,C volatile,int> >::type
         , expected3 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< 
              mpl::vector<int,C const volatile,int> >::type
         , expected4 >
));

// implicit & explicit/overrides

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< 
              mpl::vector<int,C const volatile,int>
            , ft::tag<ft::non_const, ft::non_volatile> >::type
         , expected1 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C volatile,int>,
              ft::tag<ft::const_qualified, ft::non_volatile> >::type
         , expected2 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const,int>,
              ft::tag<ft::non_const, ft::volatile_qualified> >::type
         , expected3 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const,int>,
              ft::tag<ft::const_qualified, ft::volatile_qualified> >::type
         , expected4 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C volatile,int>,
              ft::tag<ft::const_qualified, ft::volatile_qualified> >::type
         , expected4 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C volatile,int> 
                                      , ft::const_qualified    >::type
         , expected4 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const,int>
                                      , ft::volatile_qualified >::type
         , expected4 >
));



--- NEW FILE: mem_func_ptr_cv2.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/member_function_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

class C;

typedef int (C::* expected1)(int);
typedef int (C::* expected2)(int) const;
typedef int (C::* expected3)(int) volatile;
typedef int (C::* expected4)(int) const volatile;

// implicitly specified cv qualification

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C &,int> >::type
         , expected1 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const &,int> >::type
         , expected2 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< 
              mpl::vector<int,C volatile &,int> >::type
         , expected3 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< 
              mpl::vector<int,C const volatile &,int> >::type
         , expected4 >
));

// implicit & explicit/overrides

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< 
              mpl::vector<int,C const volatile &,int>
            , ft::tag<ft::non_const, ft::non_volatile> >::type
         , expected1 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C volatile &,int>,
              ft::tag<ft::const_qualified, ft::non_volatile> >::type
         , expected2 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const &,int>,
              ft::tag<ft::non_const, ft::volatile_qualified> >::type
         , expected3 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const &,int>,
              ft::tag<ft::const_qualified, ft::volatile_qualified> >::type
         , expected4 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C volatile &,int>,
              ft::tag<ft::const_qualified, ft::volatile_qualified> >::type
         , expected4 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C volatile &,int> 
                                      , ft::const_qualified    >::type
         , expected4 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C const &,int>
                                      , ft::volatile_qualified >::type
         , expected4 >
));



--- NEW FILE: mem_func_ptr_cv_ptr_to_this.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/member_function_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

class C;
typedef int (C::* expected)();

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C * const> >::type
         ,  expected >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C * volatile> >::type
         ,  expected >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C * const volatile> 
>::type
         ,  expected >
));




--- NEW FILE: member_function_pointer.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/member_function_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

class C;

typedef int (C::* expected1)(int);
typedef int (C::* expected2)(int) const;
typedef int (C::* expected3)(int) volatile;
typedef int (C::* expected4)(int) const volatile;


BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int> >::type
         , expected1 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int>, 
              ft::tag<ft::non_const, ft::non_volatile> >::type
         , expected1 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int>
                                      , ft::const_qualified    >::type
         , expected2 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int>, 
              ft::tag<ft::const_qualified, ft::non_volatile> >::type
         , expected2 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int>
                                      , ft::volatile_qualified >::type
         , expected3 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int>, 
              ft::tag<ft::non_const, ft::volatile_qualified> >::type
         , expected3 >
));

BOOST_MPL_ASSERT((
  is_same< ft::member_function_pointer< mpl::vector<int,C,int>,
              ft::tag<ft::const_qualified, ft::volatile_qualified> >::type
         , expected4 >
));


--- NEW FILE: member_object_pointer.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/function_types/member_object_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

class C;

typedef int C::* expected;


BOOST_MPL_ASSERT((
  is_same< ft::member_object_pointer< mpl::vector<int,C> >::type
         , expected >
));


--- NEW FILE: transformation.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/type_traits/is_same.hpp>

#include <boost/function_types/function_type.hpp>
#include <boost/function_types/function_pointer.hpp>
#include <boost/function_types/function_reference.hpp>
#include <boost/function_types/member_function_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

class C; 

typedef C func1(C &);
typedef C (*func_ptr1)(C &);
typedef C (&func_ref1)(C &);
typedef C (C::*mem_func_ptr1)();

BOOST_MPL_ASSERT(( is_same< func1, ft::function_type<func1>::type > ));
BOOST_MPL_ASSERT(( is_same< func1, ft::function_type<func_ptr1>::type > ));
BOOST_MPL_ASSERT(( is_same< func1, ft::function_type<func_ref1>::type > ));
BOOST_MPL_ASSERT(( is_same< func1, ft::function_type<mem_func_ptr1>::type > ));

BOOST_MPL_ASSERT(( is_same< func_ptr1, ft::function_pointer<func1>::type > ));
BOOST_MPL_ASSERT(( is_same< func_ptr1, ft::function_pointer<func_ptr1>::type > 
));
BOOST_MPL_ASSERT(( is_same< func_ptr1, ft::function_pointer<func_ref1>::type > 
));
BOOST_MPL_ASSERT(( is_same< func_ptr1, 
ft::function_pointer<mem_func_ptr1>::type > ));

BOOST_MPL_ASSERT(( is_same< func_ref1, ft::function_reference<func1>::type > ));
BOOST_MPL_ASSERT(( is_same< func_ref1, ft::function_reference<func_ptr1>::type 
> ));
BOOST_MPL_ASSERT(( is_same< func_ref1, ft::function_reference<func_ref1>::type 
> ));
BOOST_MPL_ASSERT(( is_same< func_ref1, 
ft::function_reference<mem_func_ptr1>::type > ));

BOOST_MPL_ASSERT(( is_same< mem_func_ptr1, 
ft::member_function_pointer<func1>::type > ));
BOOST_MPL_ASSERT(( is_same< mem_func_ptr1, 
ft::member_function_pointer<func_ptr1>::type > ));
BOOST_MPL_ASSERT(( is_same< mem_func_ptr1, 
ft::member_function_pointer<func_ref1>::type > ));
BOOST_MPL_ASSERT(( is_same< mem_func_ptr1, 
ft::member_function_pointer<mem_func_ptr1>::type > ));


typedef C func2(C const &);
typedef C (*func_ptr2)(C const &);
typedef C (&func_ref2)(C const &);
typedef C (C::*mem_func_ptr2)() const;

BOOST_MPL_ASSERT(( is_same< func2, ft::function_type<func2>::type > ));
BOOST_MPL_ASSERT(( is_same< func2, ft::function_type<func_ptr2>::type > ));
BOOST_MPL_ASSERT(( is_same< func2, ft::function_type<func_ref2>::type > ));
BOOST_MPL_ASSERT(( is_same< func2, ft::function_type<mem_func_ptr2>::type > ));

BOOST_MPL_ASSERT(( is_same< func_ptr2, ft::function_pointer<func2>::type > ));
BOOST_MPL_ASSERT(( is_same< func_ptr2, ft::function_pointer<func_ptr2>::type > 
));
BOOST_MPL_ASSERT(( is_same< func_ptr2, ft::function_pointer<func_ref2>::type > 
));
BOOST_MPL_ASSERT(( is_same< func_ptr2, 
ft::function_pointer<mem_func_ptr2>::type > ));

BOOST_MPL_ASSERT(( is_same< func_ref2, ft::function_reference<func2>::type > ));
BOOST_MPL_ASSERT(( is_same< func_ref2, ft::function_reference<func_ptr2>::type 
> ));
BOOST_MPL_ASSERT(( is_same< func_ref2, ft::function_reference<func_ref2>::type 
> ));
BOOST_MPL_ASSERT(( is_same< func_ref2, 
ft::function_reference<mem_func_ptr2>::type > ));

BOOST_MPL_ASSERT(( is_same< mem_func_ptr2, 
ft::member_function_pointer<func2>::type > ));
BOOST_MPL_ASSERT(( is_same< mem_func_ptr2, 
ft::member_function_pointer<func_ptr2>::type > ));
BOOST_MPL_ASSERT(( is_same< mem_func_ptr2, 
ft::member_function_pointer<func_ref2>::type > ));
BOOST_MPL_ASSERT(( is_same< mem_func_ptr2, 
ft::member_function_pointer<mem_func_ptr2>::type > ));




--- NEW FILE: variadic_function_synthesis.cpp ---

// (C) Copyright Tobias Schwinger
//
// Use modification and distribution are subject to the boost Software License,
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).

//------------------------------------------------------------------------------

#include <boost/mpl/assert.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/type_traits/is_same.hpp>

#include <boost/function_types/function_type.hpp>
#include <boost/function_types/function_pointer.hpp>
#include <boost/function_types/function_reference.hpp>
#include <boost/function_types/member_function_pointer.hpp>

namespace ft = boost::function_types;
namespace mpl = boost::mpl;
using boost::is_same;

class C;
typedef int expected_v_1(...);
typedef int expected_nv_1();
typedef int (C::*expected_v_2)(...);
typedef int (C::*expected_nv_2)();

BOOST_MPL_ASSERT(( is_same< 
    ft::function_type<mpl::vector<int>, ft::variadic>::type, expected_v_1 
> ));

BOOST_MPL_ASSERT(( is_same< 
    ft::function_type<mpl::vector<int>, ft::non_variadic>::type, expected_nv_1 
> ));

BOOST_MPL_ASSERT(( is_same< 
    ft::function_pointer<mpl::vector<int>, ft::variadic>::type, expected_v_1 * 
> ));

BOOST_MPL_ASSERT(( is_same< 
    ft::function_pointer<mpl::vector<int>, ft::non_variadic>::type
  , expected_nv_1 * 
> ));

BOOST_MPL_ASSERT(( is_same<
    ft::function_reference<mpl::vector<int>, ft::variadic>::type, expected_v_1 &
> ));

BOOST_MPL_ASSERT(( is_same<
    ft::function_reference<mpl::vector<int>, ft::non_variadic>::type
  , expected_nv_1 &
> ));

BOOST_MPL_ASSERT(( is_same< 
    ft::member_function_pointer<mpl::vector<int,C>, ft::variadic>::type
  , expected_v_2 
> ));

BOOST_MPL_ASSERT(( is_same< 
    ft::member_function_pointer<mpl::vector<int,C>, ft::non_variadic>::type
  , expected_nv_2 
> ));



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to