Compare commits

...

23 Commits

Author SHA1 Message Date
Peter Dimov
494d2fede7 Merge branch 'develop' 2016-07-22 12:34:10 +03:00
Peter Dimov
2821b51a50 Fetch libs/align for CI 2016-06-21 00:15:52 +03:00
Peter Dimov
6616add21d Do not pass rvalues to nested binds. 2016-06-20 20:46:13 +03:00
Peter Dimov
3d957988d0 Merge branch 'develop' 2016-05-21 22:03:02 +03:00
Peter Dimov
b3e40992ca Do not use the gcc toolset on Travis OS X 2016-05-21 21:38:57 +03:00
Peter Dimov
8bca02ab4d Add sudo: false to .travis.yml. 2016-05-21 20:35:02 +03:00
Peter Dimov
cea67e705b Fix commands in .travis.yml. 2016-05-21 20:27:51 +03:00
Peter Dimov
154f70cf7a Fix slashes in .travis.yml. 2016-05-21 19:44:18 +03:00
Peter Dimov
7a2d6aeaf3 Update README.md 2016-05-21 19:20:46 +03:00
Peter Dimov
ad4ac867ce Update README.md 2016-05-21 19:18:38 +03:00
Peter Dimov
42c1323df9 Create README.md 2016-05-21 19:05:59 +03:00
Peter Dimov
36b157c3e8 Fix environment variable syntax in .travis.yml. 2016-05-21 19:00:31 +03:00
Peter Dimov
d6e4fab051 Add .travis.yml. 2016-05-21 18:38:05 +03:00
Peter Dimov
4d83ab068f Merge branch 'develop' 2016-05-21 18:16:06 +03:00
Peter Dimov
5500f3363c Fix license file name. 2016-05-21 18:15:41 +03:00
Peter Dimov
cb7e7f179b Merge branch 'develop' 2016-05-21 17:57:32 +03:00
Peter Dimov
679ff6b5ba Add branch to Appveyor version. 2016-05-21 17:53:43 +03:00
Peter Dimov
8dbd26692f Add more toolsets to Appveyor. 2016-05-21 17:08:59 +03:00
Peter Dimov
21a6662b35 It's build: off, not build: no. 2016-05-21 17:00:24 +03:00
Peter Dimov
41ba1a07c0 Rename to appveyor.yml 2016-05-21 16:46:43 +03:00
Peter Dimov
59b0379969 Commit ID is for the local repo, not superproject 2016-05-21 16:38:39 +03:00
Peter Dimov
bf402c726c Merge branch 'develop' 2016-05-21 16:28:16 +03:00
Peter Dimov
5ac488c223 Add .appveyor.yml. 2016-05-21 16:27:41 +03:00
6 changed files with 368 additions and 18 deletions

49
.travis.yml Normal file
View File

@@ -0,0 +1,49 @@
# Copyright 2016 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
language: cpp
sudo: false
os:
- linux
- osx
branches:
only:
- master
- develop
install:
- git clone -b $TRAVIS_BRANCH https://github.com/boostorg/boost.git boost
- cd boost
- git submodule init libs/bind
- git submodule init libs/align
- git submodule init libs/assert
- git submodule init libs/config
- git submodule init libs/core
- git submodule init libs/function
- git submodule init libs/integer
- git submodule init libs/move
- git submodule init libs/mpl
- git submodule init libs/predef
- git submodule init libs/preprocessor
- git submodule init libs/smart_ptr
- git submodule init libs/static_assert
- git submodule init libs/throw_exception
- git submodule init libs/type_index
- git submodule init libs/type_traits
- git submodule init tools/build
- git submodule init tools/inspect
- git submodule update
- cd libs/bind
- git checkout -q $TRAVIS_COMMIT
- cd ../..
- ./bootstrap.sh
- ./b2 headers
script:
- TOOLSET=gcc,clang
- if [ $TRAVIS_OS_NAME == osx ]; then TOOLSET=clang; fi
- ./b2 libs/bind/test toolset=$TOOLSET

6
README.md Normal file
View File

@@ -0,0 +1,6 @@
# Boost.Bind
Branch | Travis | Appveyor
---------|--------|---------
Develop | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=develop)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.appveyor.com/api/projects/status/github/boostorg/bind?branch=develop&svg=true)](https://ci.appveyor.com/project/pdimov/bind)
Master | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=master)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.appveyor.com/api/projects/status/github/boostorg/bind?branch=master&svg=true)](https://ci.appveyor.com/project/pdimov/bind)

45
appveyor.yml Normal file
View File

@@ -0,0 +1,45 @@
# Copyright 2016 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
version: 1.0.{build}-{branch}
shallow_clone: true
branches:
only:
- master
- develop
install:
- git clone -b %APPVEYOR_REPO_BRANCH% https://github.com/boostorg/boost.git boost
- cd boost
- git submodule init libs/bind
- git submodule init libs/align
- git submodule init libs/assert
- git submodule init libs/config
- git submodule init libs/core
- git submodule init libs/function
- git submodule init libs/integer
- git submodule init libs/move
- git submodule init libs/mpl
- git submodule init libs/predef
- git submodule init libs/preprocessor
- git submodule init libs/smart_ptr
- git submodule init libs/static_assert
- git submodule init libs/throw_exception
- git submodule init libs/type_index
- git submodule init libs/type_traits
- git submodule init tools/build
- git submodule init tools/inspect
- git submodule update
- cd libs\bind
- git checkout -q %APPVEYOR_REPO_COMMIT%
- cd ..\..
- bootstrap
- b2 headers
build: off
test_script:
- b2 libs/bind/test toolset=msvc-9.0,msvc-10.0,msvc-11.0,msvc-12.0

View File

@@ -887,9 +887,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist1<A1&> a( a1_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist1<A1&> a( a1_ );
return b.eval( a );
}
};
template< class A1, class A2 > class rrlist2
@@ -915,9 +923,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist2<A1&, A2&> a( a1_, a2_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist2<A1&, A2&> a( a1_, a2_ );
return b.eval( a );
}
};
template< class A1, class A2, class A3 > class rrlist3
@@ -946,9 +962,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist3<A1&, A2&, A3&> a( a1_, a2_, a3_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist3<A1&, A2&, A3&> a( a1_, a2_, a3_ );
return b.eval( a );
}
};
template< class A1, class A2, class A3, class A4 > class rrlist4
@@ -980,9 +1004,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist4<A1&, A2&, A3&, A4&> a( a1_, a2_, a3_, a4_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist4<A1&, A2&, A3&, A4&> a( a1_, a2_, a3_, a4_ );
return b.eval( a );
}
};
template< class A1, class A2, class A3, class A4, class A5 > class rrlist5
@@ -1017,9 +1049,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist5<A1&, A2&, A3&, A4&, A5&> a( a1_, a2_, a3_, a4_, a5_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist5<A1&, A2&, A3&, A4&, A5&> a( a1_, a2_, a3_, a4_, a5_ );
return b.eval( a );
}
};
template< class A1, class A2, class A3, class A4, class A5, class A6 > class rrlist6
@@ -1057,9 +1097,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist6<A1&, A2&, A3&, A4&, A5&, A6&> a( a1_, a2_, a3_, a4_, a5_, a6_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist6<A1&, A2&, A3&, A4&, A5&, A6&> a( a1_, a2_, a3_, a4_, a5_, a6_ );
return b.eval( a );
}
};
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7 > class rrlist7
@@ -1100,9 +1148,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist7<A1&, A2&, A3&, A4&, A5&, A6&, A7&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist7<A1&, A2&, A3&, A4&, A5&, A6&, A7&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_ );
return b.eval( a );
}
};
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class rrlist8
@@ -1146,9 +1202,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist8<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist8<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_ );
return b.eval( a );
}
};
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > class rrlist9
@@ -1195,9 +1259,17 @@ public:
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
{
rrlist9<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&, A9&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ );
return b.eval( a );
}
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
{
rrlist9<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&, A9&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ );
return b.eval( a );
}
};
template<class R, class F, class L> class bind_t

View File

@@ -55,4 +55,5 @@ test-suite "bind"
[ run bind_function_ap_test.cpp ]
[ run bind_type_test.cpp ]
[ run bind_unique_ptr_test.cpp ]
[ run bind_nested_rv_test.cpp ]
;

View File

@@ -0,0 +1,177 @@
#include <boost/config.hpp>
//
// bind_nested_rv_test.cpp
//
// Copyright (c) 2016 Peter Dimov
//
// Distributed under 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
//
#include <boost/bind.hpp>
#include <boost/make_shared.hpp>
#include <boost/function.hpp>
#include <boost/detail/lightweight_test.hpp>
//
bool f1( boost::shared_ptr<int> p1 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
return true;
}
bool f2( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
return true;
}
bool f3( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2, boost::shared_ptr<int> p3 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
BOOST_TEST( p3 != 0 && *p3 == 3 );
return true;
}
bool f4( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2, boost::shared_ptr<int> p3, boost::shared_ptr<int> p4 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
BOOST_TEST( p3 != 0 && *p3 == 3 );
BOOST_TEST( p4 != 0 && *p4 == 4 );
return true;
}
bool f5( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2, boost::shared_ptr<int> p3, boost::shared_ptr<int> p4, boost::shared_ptr<int> p5 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
BOOST_TEST( p3 != 0 && *p3 == 3 );
BOOST_TEST( p4 != 0 && *p4 == 4 );
BOOST_TEST( p5 != 0 && *p5 == 5 );
return true;
}
bool f6( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2, boost::shared_ptr<int> p3, boost::shared_ptr<int> p4, boost::shared_ptr<int> p5, boost::shared_ptr<int> p6 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
BOOST_TEST( p3 != 0 && *p3 == 3 );
BOOST_TEST( p4 != 0 && *p4 == 4 );
BOOST_TEST( p5 != 0 && *p5 == 5 );
BOOST_TEST( p6 != 0 && *p6 == 6 );
return true;
}
bool f7( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2, boost::shared_ptr<int> p3, boost::shared_ptr<int> p4, boost::shared_ptr<int> p5, boost::shared_ptr<int> p6, boost::shared_ptr<int> p7 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
BOOST_TEST( p3 != 0 && *p3 == 3 );
BOOST_TEST( p4 != 0 && *p4 == 4 );
BOOST_TEST( p5 != 0 && *p5 == 5 );
BOOST_TEST( p6 != 0 && *p6 == 6 );
BOOST_TEST( p7 != 0 && *p7 == 7 );
return true;
}
bool f8( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2, boost::shared_ptr<int> p3, boost::shared_ptr<int> p4, boost::shared_ptr<int> p5, boost::shared_ptr<int> p6, boost::shared_ptr<int> p7, boost::shared_ptr<int> p8 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
BOOST_TEST( p3 != 0 && *p3 == 3 );
BOOST_TEST( p4 != 0 && *p4 == 4 );
BOOST_TEST( p5 != 0 && *p5 == 5 );
BOOST_TEST( p6 != 0 && *p6 == 6 );
BOOST_TEST( p7 != 0 && *p7 == 7 );
BOOST_TEST( p8 != 0 && *p8 == 8 );
return true;
}
bool f9( boost::shared_ptr<int> p1, boost::shared_ptr<int> p2, boost::shared_ptr<int> p3, boost::shared_ptr<int> p4, boost::shared_ptr<int> p5, boost::shared_ptr<int> p6, boost::shared_ptr<int> p7, boost::shared_ptr<int> p8, boost::shared_ptr<int> p9 )
{
BOOST_TEST( p1 != 0 && *p1 == 1 );
BOOST_TEST( p2 != 0 && *p2 == 2 );
BOOST_TEST( p3 != 0 && *p3 == 3 );
BOOST_TEST( p4 != 0 && *p4 == 4 );
BOOST_TEST( p5 != 0 && *p5 == 5 );
BOOST_TEST( p6 != 0 && *p6 == 6 );
BOOST_TEST( p7 != 0 && *p7 == 7 );
BOOST_TEST( p8 != 0 && *p8 == 8 );
BOOST_TEST( p9 != 0 && *p9 == 9 );
return true;
}
void test()
{
{
boost::function<bool(boost::shared_ptr<int>)> f( f1 );
( boost::bind( f, _1 ) && boost::bind( f1, _1 ) )( boost::make_shared<int>( 1 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f2 );
( boost::bind( f, _1, _2 ) && boost::bind( f2, _1, _2 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f3 );
( boost::bind( f, _1, _2, _3 ) && boost::bind( f3, _1, _2, _3 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f3 );
( boost::bind( f, _1, _2, _3 ) && boost::bind( f3, _1, _2, _3 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f4 );
( boost::bind( f, _1, _2, _3, _4 ) && boost::bind( f4, _1, _2, _3, _4 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ), boost::make_shared<int>( 4 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f5 );
( boost::bind( f, _1, _2, _3, _4, _5 ) && boost::bind( f5, _1, _2, _3, _4, _5 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ), boost::make_shared<int>( 4 ), boost::make_shared<int>( 5 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f6 );
( boost::bind( f, _1, _2, _3, _4, _5, _6 ) && boost::bind( f6, _1, _2, _3, _4, _5, _6 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ), boost::make_shared<int>( 4 ), boost::make_shared<int>( 5 ), boost::make_shared<int>( 6 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f7 );
( boost::bind( f, _1, _2, _3, _4, _5, _6, _7 ) && boost::bind( f7, _1, _2, _3, _4, _5, _6, _7 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ), boost::make_shared<int>( 4 ), boost::make_shared<int>( 5 ), boost::make_shared<int>( 6 ), boost::make_shared<int>( 7 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f8 );
( boost::bind( f, _1, _2, _3, _4, _5, _6, _7, _8 ) && boost::bind( f8, _1, _2, _3, _4, _5, _6, _7, _8 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ), boost::make_shared<int>( 4 ), boost::make_shared<int>( 5 ), boost::make_shared<int>( 6 ), boost::make_shared<int>( 7 ), boost::make_shared<int>( 8 ) );
}
{
boost::function<bool(boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>, boost::shared_ptr<int>)> f( f9 );
( boost::bind( f, _1, _2, _3, _4, _5, _6, _7, _8, _9 ) && boost::bind( f9, _1, _2, _3, _4, _5, _6, _7, _8, _9 ) )( boost::make_shared<int>( 1 ), boost::make_shared<int>( 2 ), boost::make_shared<int>( 3 ), boost::make_shared<int>( 4 ), boost::make_shared<int>( 5 ), boost::make_shared<int>( 6 ), boost::make_shared<int>( 7 ), boost::make_shared<int>( 8 ), boost::make_shared<int>( 9 ) );
}
}
int main()
{
test();
return boost::report_errors();
}