forked from boostorg/bind
Compare commits
5 Commits
boost-1.40
...
boost-1.43
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1a09aa10e | ||
|
|
6e208277e3 | ||
|
|
70f0c8efbb | ||
|
|
00b3c895fd | ||
|
|
8b58b0d207 |
@@ -1,28 +0,0 @@
|
||||
#
|
||||
# Copyright Troy D. Straszheim
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# See http://www.boost.org/LICENSE_1_0.txt
|
||||
#
|
||||
#----------------------------------------------------------------------------
|
||||
# This file was automatically generated from the original CMakeLists.txt file
|
||||
# Add a variable to hold the headers for the library
|
||||
set (lib_headers
|
||||
bind.hpp
|
||||
bind
|
||||
)
|
||||
|
||||
# Add a library target to the build system
|
||||
boost_library_project(
|
||||
bind
|
||||
# SRCDIRS
|
||||
TESTDIRS test
|
||||
HEADERS ${lib_headers}
|
||||
# DOCDIRS
|
||||
DESCRIPTION "A generalization of the standard functions std::bind1st and std::bind2nd. It supports arbitrary function objects, functions, function pointers, and member function pointers, and is able to bind any argument to a specific value or route input arguments into arbitrary positions."
|
||||
MODULARIZED
|
||||
AUTHORS "Peter Dimov <pdimov -at- mmltd.net>"
|
||||
# MAINTAINERS
|
||||
)
|
||||
|
||||
|
||||
@@ -207,6 +207,13 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
// MSVC is bright enough to realise that the parameter rhs
|
||||
// in operator==may be unused for some template argument types:
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4100)
|
||||
#endif
|
||||
|
||||
template< class A1 > class list1: private storage1< A1 >
|
||||
{
|
||||
private:
|
||||
@@ -846,6 +853,10 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
// bind_t
|
||||
|
||||
#ifndef BOOST_NO_VOID_RETURNS
|
||||
@@ -1629,7 +1640,7 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl
|
||||
// data member pointers
|
||||
|
||||
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
|
||||
|| ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, <= 0x610 ) )
|
||||
|| ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x620 ) ) )
|
||||
|
||||
template<class R, class T, class A1>
|
||||
_bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >
|
||||
@@ -1654,7 +1665,14 @@ template< class M, class T > struct add_cref< M T::*, 0 >
|
||||
|
||||
template< class M, class T > struct add_cref< M T::*, 1 >
|
||||
{
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4180)
|
||||
#endif
|
||||
typedef M const & type;
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
};
|
||||
|
||||
template< class R, class T > struct add_cref< R (T::*) (), 1 >
|
||||
|
||||
@@ -51,14 +51,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -109,7 +111,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p);
|
||||
}
|
||||
|
||||
R operator()(T const & t) const
|
||||
@@ -164,14 +167,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -223,7 +228,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1) const
|
||||
@@ -276,14 +282,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1, A2 a2) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -333,7 +341,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1, A2 a2) const
|
||||
@@ -386,14 +395,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -443,7 +454,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1, A2 a2, A3 a3) const
|
||||
@@ -496,14 +508,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -553,7 +567,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const
|
||||
@@ -606,14 +621,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -663,7 +680,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
|
||||
@@ -716,14 +734,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -773,7 +793,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
|
||||
@@ -826,14 +847,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -883,7 +906,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
|
||||
@@ -936,14 +960,16 @@ public:
|
||||
|
||||
template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
}
|
||||
|
||||
#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -998,7 +1024,8 @@ public:
|
||||
|
||||
template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
|
||||
{
|
||||
BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
U const * p = 0;
|
||||
BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
}
|
||||
|
||||
R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
boost_module(bind DEPENDS utility mpl detail config)
|
||||
@@ -1,47 +0,0 @@
|
||||
#
|
||||
# Copyright Troy D. Straszheim
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# See http://www.boost.org/LICENSE_1_0.txt
|
||||
#
|
||||
boost_additional_test_dependencies(bind BOOST_DEPENDS test)
|
||||
|
||||
SET(tests
|
||||
bind_test
|
||||
bind_dm_test
|
||||
bind_eq_test
|
||||
bind_const_test
|
||||
bind_cv_test
|
||||
bind_stateful_test
|
||||
bind_dm2_test
|
||||
bind_not_test
|
||||
bind_rel_test
|
||||
bind_function_test
|
||||
bind_lookup_problem_test
|
||||
bind_rv_sp_test
|
||||
bind_dm3_test
|
||||
bind_visit_test
|
||||
bind_placeholder_test
|
||||
bind_rvalue_test
|
||||
bind_and_or_test
|
||||
mem_fn_test
|
||||
mem_fn_void_test
|
||||
mem_fn_derived_test
|
||||
mem_fn_eq_test
|
||||
mem_fn_dm_test
|
||||
mem_fn_rv_test
|
||||
ref_fn_test
|
||||
bind_fnobj2_test
|
||||
bind_fn2_test
|
||||
bind_mf2_test
|
||||
bind_eq2_test
|
||||
mem_fn_ref_test
|
||||
bind_ref_test
|
||||
bind_eq3_test
|
||||
)
|
||||
FOREACH(test ${tests})
|
||||
boost_test_run(${test})
|
||||
ENDFOREACH(test ${tests})
|
||||
|
||||
boost_test_compile(bind_unary_addr)
|
||||
|
||||
@@ -43,4 +43,5 @@ test-suite "bind"
|
||||
[ run bind_ref_test.cpp ]
|
||||
[ run bind_eq3_test.cpp ]
|
||||
[ run protect_test.cpp ]
|
||||
[ run mem_fn_unary_addr_test.cpp ]
|
||||
;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
# pragma warning(disable: 4710) // function not inlined
|
||||
# pragma warning(disable: 4711) // function selected for automatic inline expansion
|
||||
# pragma warning(disable: 4514) // unreferenced inline removed
|
||||
# pragma warning(disable: 4100) // unreferenced formal parameter (it is referenced!)
|
||||
#endif
|
||||
|
||||
// Copyright (c) 2006 Douglas Gregor <doug.gregor@gmail.com>
|
||||
|
||||
151
test/mem_fn_unary_addr_test.cpp
Normal file
151
test/mem_fn_unary_addr_test.cpp
Normal file
@@ -0,0 +1,151 @@
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
|
||||
#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
|
||||
|
||||
//
|
||||
// mem_fn_unary_addr_test.cpp - poisoned operator& test
|
||||
//
|
||||
// Copyright (c) 2009 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/mem_fn.hpp>
|
||||
|
||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
||||
#pragma warning(push, 3)
|
||||
#endif
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
unsigned int hash = 0;
|
||||
|
||||
struct X
|
||||
{
|
||||
int f0() { f1(17); return 0; }
|
||||
int g0() const { g1(17); return 0; }
|
||||
|
||||
int f1(int a1) { hash = (hash * 17041 + a1) % 32768; return 0; }
|
||||
int g1(int a1) const { hash = (hash * 17041 + a1 * 2) % 32768; return 0; }
|
||||
|
||||
int f2(int a1, int a2) { f1(a1); f1(a2); return 0; }
|
||||
int g2(int a1, int a2) const { g1(a1); g1(a2); return 0; }
|
||||
|
||||
int f3(int a1, int a2, int a3) { f2(a1, a2); f1(a3); return 0; }
|
||||
int g3(int a1, int a2, int a3) const { g2(a1, a2); g1(a3); return 0; }
|
||||
|
||||
int f4(int a1, int a2, int a3, int a4) { f3(a1, a2, a3); f1(a4); return 0; }
|
||||
int g4(int a1, int a2, int a3, int a4) const { g3(a1, a2, a3); g1(a4); return 0; }
|
||||
|
||||
int f5(int a1, int a2, int a3, int a4, int a5) { f4(a1, a2, a3, a4); f1(a5); return 0; }
|
||||
int g5(int a1, int a2, int a3, int a4, int a5) const { g4(a1, a2, a3, a4); g1(a5); return 0; }
|
||||
|
||||
int f6(int a1, int a2, int a3, int a4, int a5, int a6) { f5(a1, a2, a3, a4, a5); f1(a6); return 0; }
|
||||
int g6(int a1, int a2, int a3, int a4, int a5, int a6) const { g5(a1, a2, a3, a4, a5); g1(a6); return 0; }
|
||||
|
||||
int f7(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { f6(a1, a2, a3, a4, a5, a6); f1(a7); return 0; }
|
||||
int g7(int a1, int a2, int a3, int a4, int a5, int a6, int a7) const { g6(a1, a2, a3, a4, a5, a6); g1(a7); return 0; }
|
||||
|
||||
int f8(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { f7(a1, a2, a3, a4, a5, a6, a7); f1(a8); return 0; }
|
||||
int g8(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) const { g7(a1, a2, a3, a4, a5, a6, a7); g1(a8); return 0; }
|
||||
};
|
||||
|
||||
template<class T> class Y
|
||||
{
|
||||
private:
|
||||
|
||||
T * pt_;
|
||||
|
||||
void operator& ();
|
||||
void operator& () const;
|
||||
|
||||
public:
|
||||
|
||||
explicit Y( T * pt ): pt_( pt )
|
||||
{
|
||||
}
|
||||
|
||||
T * get() const
|
||||
{
|
||||
return pt_;
|
||||
}
|
||||
};
|
||||
|
||||
#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x620 ) )
|
||||
namespace boost
|
||||
{
|
||||
#endif
|
||||
|
||||
template<class T> T * get_pointer( Y< T > const & y )
|
||||
{
|
||||
return y.get();
|
||||
}
|
||||
|
||||
#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x620 ) )
|
||||
} // namespace boost
|
||||
#endif
|
||||
|
||||
int detect_errors(bool x)
|
||||
{
|
||||
if( x )
|
||||
{
|
||||
std::cerr << "no errors detected.\n";
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "test failed.\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
using boost::mem_fn;
|
||||
|
||||
X x;
|
||||
|
||||
Y<X> px( &x );
|
||||
Y<X const> pcx( &x );
|
||||
|
||||
mem_fn(&X::f0)( px );
|
||||
mem_fn(&X::g0)( pcx );
|
||||
|
||||
mem_fn(&X::f1)( px, 1 );
|
||||
mem_fn(&X::g1)( pcx, 1 );
|
||||
|
||||
mem_fn(&X::f2)( px, 1, 2 );
|
||||
mem_fn(&X::g2)( pcx, 1, 2 );
|
||||
|
||||
mem_fn(&X::f3)( px, 1, 2, 3 );
|
||||
mem_fn(&X::g3)( pcx, 1, 2, 3 );
|
||||
|
||||
mem_fn(&X::f4)( px, 1, 2, 3, 4 );
|
||||
mem_fn(&X::g4)( pcx, 1, 2, 3, 4 );
|
||||
|
||||
mem_fn(&X::f5)( px, 1, 2, 3, 4, 5 );
|
||||
mem_fn(&X::g5)( pcx, 1, 2, 3, 4, 5 );
|
||||
|
||||
mem_fn(&X::f6)( px, 1, 2, 3, 4, 5, 6 );
|
||||
mem_fn(&X::g6)( pcx, 1, 2, 3, 4, 5, 6 );
|
||||
|
||||
mem_fn(&X::f7)( px, 1, 2, 3, 4, 5, 6, 7 );
|
||||
mem_fn(&X::g7)( pcx, 1, 2, 3, 4, 5, 6, 7 );
|
||||
|
||||
mem_fn(&X::f8)( px, 1, 2, 3, 4, 5, 6, 7, 8 );
|
||||
mem_fn(&X::g8)( pcx, 1, 2, 3, 4, 5, 6, 7, 8 );
|
||||
|
||||
return detect_errors( hash == 2155 );
|
||||
}
|
||||
Reference in New Issue
Block a user