forked from boostorg/bind
operator! added
[SVN r27632]
This commit is contained in:
@@ -1134,6 +1134,21 @@ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, c
|
|||||||
typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;
|
typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// operator!
|
||||||
|
|
||||||
|
struct logical_not
|
||||||
|
{
|
||||||
|
template<class V> bool operator()(V const & v) const { return !v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class R, class F, class L>
|
||||||
|
bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
|
||||||
|
operator! (bind_t<R, F, L> const & f)
|
||||||
|
{
|
||||||
|
typedef list1< bind_t<R, F, L> > list_type;
|
||||||
|
return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace _bi
|
} // namespace _bi
|
||||||
|
|
||||||
// visit_each
|
// visit_each
|
||||||
|
@@ -23,6 +23,7 @@ DEPENDS all : bind ;
|
|||||||
[ run bind_const_test.cpp ]
|
[ run bind_const_test.cpp ]
|
||||||
[ run bind_cv_test.cpp ]
|
[ run bind_cv_test.cpp ]
|
||||||
[ run bind_stateful_test.cpp ]
|
[ run bind_stateful_test.cpp ]
|
||||||
|
[ run bind_not_test.cpp ]
|
||||||
[ run mem_fn_test.cpp ]
|
[ run mem_fn_test.cpp ]
|
||||||
[ run mem_fn_void_test.cpp ]
|
[ run mem_fn_void_test.cpp ]
|
||||||
[ run mem_fn_derived_test.cpp ]
|
[ run mem_fn_derived_test.cpp ]
|
||||||
|
@@ -17,6 +17,7 @@ test-suite "bind"
|
|||||||
[ run bind_const_test.cpp ]
|
[ run bind_const_test.cpp ]
|
||||||
[ run bind_cv_test.cpp ]
|
[ run bind_cv_test.cpp ]
|
||||||
[ run bind_stateful_test.cpp ]
|
[ run bind_stateful_test.cpp ]
|
||||||
|
[ run bind_not_test.cpp ]
|
||||||
[ run mem_fn_test.cpp ]
|
[ run mem_fn_test.cpp ]
|
||||||
[ run mem_fn_void_test.cpp ]
|
[ run mem_fn_void_test.cpp ]
|
||||||
[ run mem_fn_derived_test.cpp ]
|
[ run mem_fn_derived_test.cpp ]
|
||||||
|
57
test/bind_not_test.cpp
Normal file
57
test/bind_not_test.cpp
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#include <boost/config.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
|
||||||
|
|
||||||
|
//
|
||||||
|
// bind_not_test.cpp - operator!
|
||||||
|
//
|
||||||
|
// 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 <boost/bind.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
|
||||||
|
|
||||||
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
|
|
||||||
|
template<class F, class A1, class R> void test( F f, A1 a1, R r )
|
||||||
|
{
|
||||||
|
BOOST_TEST( f(a1) == r );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool f( bool v )
|
||||||
|
{
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
int g( int v )
|
||||||
|
{
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
test( !boost::bind( f, true ), 0, !f( true ) );
|
||||||
|
test( !boost::bind( g, _1 ), 5, !g( 5 ) );
|
||||||
|
test( boost::bind( f, !boost::bind( f, true ) ), 0, f( !f( true ) ) );
|
||||||
|
test( boost::bind( f, !boost::bind( f, _1 ) ), true, f( !f( true ) ) );
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
Reference in New Issue
Block a user