diff --git a/test/Jamfile b/test/Jamfile index 5ac58f5..0698398 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -29,6 +29,7 @@ DEPENDS all : bind ; [ run bind_function_test.cpp ] [ run bind_lookup_problem_test.cpp ] [ run bind_rv_sp_test.cpp ] + [ compile bind_unary_addr.cpp ] [ run mem_fn_test.cpp ] [ run mem_fn_void_test.cpp ] [ run mem_fn_derived_test.cpp ] diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 12f1739..19bc0f5 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -23,6 +23,7 @@ test-suite "bind" [ run bind_function_test.cpp ] [ run bind_lookup_problem_test.cpp ] [ run bind_rv_sp_test.cpp ] + [ compile bind_unary_addr.cpp ] [ run mem_fn_test.cpp ] [ run mem_fn_void_test.cpp ] [ run mem_fn_derived_test.cpp ] diff --git a/test/bind_unary_addr.cpp b/test/bind_unary_addr.cpp new file mode 100644 index 0000000..b211f0f --- /dev/null +++ b/test/bind_unary_addr.cpp @@ -0,0 +1,147 @@ +#include + +#if defined(BOOST_MSVC) +#pragma warning(disable: 4786) // identifier truncated in debug info +#pragma warning(disable: 4710) // function not inlined +#pragma warning(disable: 4711) // function selected for automatic inline expansion +#pragma warning(disable: 4514) // unreferenced inline removed +#endif + +// +// bind_unary_addr.cpp +// +// Copyright (c) 2005 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 + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +#pragma warning(push, 3) +#endif + +#include + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +#pragma warning(pop) +#endif + +class X +{ +private: + + void operator& (); + void operator& () const; + +public: + + void operator()() + { + } + + void operator()() const + { + } + + void operator()(int) + { + } + + void operator()(int) const + { + } + + void operator()(int, int) + { + } + + void operator()(int, int) const + { + } + + void operator()(int, int, int) + { + } + + void operator()(int, int, int) const + { + } + + void operator()(int, int, int, int) + { + } + + void operator()(int, int, int, int) const + { + } + + void operator()(int, int, int, int, int) + { + } + + void operator()(int, int, int, int, int) const + { + } + + void operator()(int, int, int, int, int, int) + { + } + + void operator()(int, int, int, int, int, int) const + { + } + + void operator()(int, int, int, int, int, int, int) + { + } + + void operator()(int, int, int, int, int, int, int) const + { + } + + void operator()(int, int, int, int, int, int, int, int) + { + } + + void operator()(int, int, int, int, int, int, int, int) const + { + } + + void operator()(int, int, int, int, int, int, int, int, int) + { + } + + void operator()(int, int, int, int, int, int, int, int, int) const + { + } +}; + +template void test_const( F const & f ) +{ + f(); +} + +template void test( F f ) +{ + f(); + test_const( f ); +} + +int main() +{ + test( boost::bind( X() ) ); + test( boost::bind( X(), 1 ) ); + test( boost::bind( X(), 1, 2 ) ); + test( boost::bind( X(), 1, 2, 3 ) ); + test( boost::bind( X(), 1, 2, 3, 4 ) ); + test( boost::bind( X(), 1, 2, 3, 4, 5 ) ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6 ) ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6, 7 ) ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6, 7, 8 ) ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6, 7, 8, 9 ) ); + + return 0; +}