| 1 | //
|
|---|
| 2 | // bind_typeof_test.cpp - test for bind/typeof.hpp
|
|---|
| 3 | //
|
|---|
| 4 | // Copyright (c) 2009 Gevorg Voskanyan
|
|---|
| 5 | //
|
|---|
| 6 | // Distributed under the Boost Software License, Version 1.0. (See
|
|---|
| 7 | // accompanying file LICENSE_1_0.txt or copy at
|
|---|
| 8 | // http://www.boost.org/LICENSE_1_0.txt)
|
|---|
| 9 | //
|
|---|
| 10 |
|
|---|
| 11 | #define BOOST_TYPEOF_COMPLIANT
|
|---|
| 12 |
|
|---|
| 13 | #include <boost/bind.hpp>
|
|---|
| 14 | #include <boost/bind/typeof.hpp>
|
|---|
| 15 |
|
|---|
| 16 | #include <boost/type_traits/is_same.hpp>
|
|---|
| 17 | #include <boost/detail/lightweight_test.hpp>
|
|---|
| 18 |
|
|---|
| 19 | template < typename TestType, typename DeducedType >
|
|---|
| 20 | void test_against_deduced_type( DeducedType )
|
|---|
| 21 | {
|
|---|
| 22 | BOOST_TEST(( boost::is_same< TestType, DeducedType >::value ));
|
|---|
| 23 | }
|
|---|
| 24 |
|
|---|
| 25 | #define TEST_AGAINST_DEDUCED_TYPE(Expr) test_against_deduced_type< BOOST_TYPEOF( Expr ) >( Expr )
|
|---|
| 26 | #define TYPEOF_TEST(Expr) TEST_AGAINST_DEDUCED_TYPE( Expr )
|
|---|
| 27 |
|
|---|
| 28 | void f0() {}
|
|---|
| 29 | void f1( int ) {}
|
|---|
| 30 | void f2( int, int ) {}
|
|---|
| 31 | void f3( int, int, int ) {}
|
|---|
| 32 | void f4( int, int, int, int ) {}
|
|---|
| 33 | void f5( int, int, int, int, int ) {}
|
|---|
| 34 | void f6( int, int, int, int, int, int ) {}
|
|---|
| 35 | void f7( int, int, int, int, int, int, int ) {}
|
|---|
| 36 | void f8( int, int, int, int, int, int, int, int ) {}
|
|---|
| 37 | void f9( int, int, int, int, int, int, int, int, int ) {}
|
|---|
| 38 |
|
|---|
| 39 | int main()
|
|---|
| 40 | {
|
|---|
| 41 | TYPEOF_TEST( boost::bind( &f0 ) );
|
|---|
| 42 | TYPEOF_TEST( boost::bind( &f1, _1 ) );
|
|---|
| 43 | TYPEOF_TEST( boost::bind( &f2, _1, 0 ) );
|
|---|
| 44 | TYPEOF_TEST( boost::bind( &f3, _1, 0, _2 ) );
|
|---|
| 45 | TYPEOF_TEST( boost::bind( &f4, _1, 0, _2, 0 ) );
|
|---|
| 46 | TYPEOF_TEST( boost::bind( &f5, _1, 0, _2, 0, _3 ) );
|
|---|
| 47 | TYPEOF_TEST( boost::bind( &f6, _1, 0, _2, 0, _3, 0 ) );
|
|---|
| 48 | TYPEOF_TEST( boost::bind( &f7, _1, 0, _2, 0, _3, 0, _4 ) );
|
|---|
| 49 | TYPEOF_TEST( boost::bind( &f8, _1, 0, _2, 0, _3, 0, _4, 0 ) );
|
|---|
| 50 | TYPEOF_TEST( boost::bind( &f9, _1, 0, _2, 0, _3, 0, _4, 0, _5 ) );
|
|---|
| 51 | TYPEOF_TEST( boost::bind( &f9, _1, _2, _3, _4, _5, _6, _7, _8, _9 ) );
|
|---|
| 52 | return boost::report_errors();
|
|---|
| 53 | }
|
|---|