Compare commits

...

3 Commits

Author SHA1 Message Date
cd79ba8c8b Remove C++03 from Travis and Appveyor 2019-11-06 03:12:56 +02:00
f3e4ed2481 Use std::function 2019-11-06 03:10:09 +02:00
a7c28f6117 Remove tests that require C++03 to pass 2019-11-06 03:09:54 +02:00
10 changed files with 437 additions and 40 deletions

View File

@ -26,11 +26,11 @@ matrix:
include: include:
- os: linux - os: linux
compiler: g++ compiler: g++
env: TOOLSET=gcc CXXSTD=03,11 env: TOOLSET=gcc CXXSTD=11
- os: linux - os: linux
compiler: g++-4.4 compiler: g++-4.4
env: TOOLSET=gcc CXXSTD=98,0x env: TOOLSET=gcc CXXSTD=0x
addons: addons:
apt: apt:
packages: packages:
@ -40,7 +40,7 @@ matrix:
- os: linux - os: linux
compiler: g++-4.6 compiler: g++-4.6
env: TOOLSET=gcc CXXSTD=03,0x env: TOOLSET=gcc CXXSTD=0x
addons: addons:
apt: apt:
packages: packages:
@ -50,7 +50,7 @@ matrix:
- os: linux - os: linux
compiler: g++-4.7 compiler: g++-4.7
env: TOOLSET=gcc CXXSTD=03,11 env: TOOLSET=gcc CXXSTD=11
addons: addons:
apt: apt:
packages: packages:
@ -60,7 +60,7 @@ matrix:
- os: linux - os: linux
compiler: g++-4.8 compiler: g++-4.8
env: TOOLSET=gcc CXXSTD=03,11 env: TOOLSET=gcc CXXSTD=11
addons: addons:
apt: apt:
packages: packages:
@ -69,7 +69,7 @@ matrix:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- os: linux - os: linux
compiler: g++-4.9 compiler: g++-4.9
env: TOOLSET=gcc CXXSTD=03,11 env: TOOLSET=gcc CXXSTD=11
addons: addons:
apt: apt:
packages: packages:
@ -79,7 +79,7 @@ matrix:
- os: linux - os: linux
compiler: g++-5 compiler: g++-5
env: TOOLSET=gcc CXXSTD=03,11,14,1z env: TOOLSET=gcc CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -89,7 +89,7 @@ matrix:
- os: linux - os: linux
compiler: g++-6 compiler: g++-6
env: TOOLSET=gcc CXXSTD=03,11,14,1z env: TOOLSET=gcc CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -99,7 +99,7 @@ matrix:
- os: linux - os: linux
compiler: g++-7 compiler: g++-7
env: TOOLSET=gcc CXXSTD=03,11,14,17 env: TOOLSET=gcc CXXSTD=11,14,17
addons: addons:
apt: apt:
packages: packages:
@ -109,7 +109,7 @@ matrix:
- os: linux - os: linux
compiler: g++-8 compiler: g++-8
env: TOOLSET=gcc CXXSTD=03,11,14,17,2a env: TOOLSET=gcc CXXSTD=11,14,17,2a
addons: addons:
apt: apt:
packages: packages:
@ -119,7 +119,7 @@ matrix:
- os: linux - os: linux
compiler: g++-9 compiler: g++-9
env: TOOLSET=gcc CXXSTD=03,11,14,17,2a env: TOOLSET=gcc CXXSTD=11,14,17,2a
addons: addons:
apt: apt:
packages: packages:
@ -129,7 +129,7 @@ matrix:
- os: linux - os: linux
compiler: g++-7 compiler: g++-7
env: UBSAN=1 TOOLSET=gcc CXXSTD=03,11,14,17 UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold env: UBSAN=1 TOOLSET=gcc CXXSTD=11,14,17 UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold
addons: addons:
apt: apt:
packages: packages:
@ -139,11 +139,11 @@ matrix:
- os: linux - os: linux
compiler: clang++ compiler: clang++
env: TOOLSET=clang CXXSTD=03,11 env: TOOLSET=clang CXXSTD=11
- os: linux - os: linux
compiler: /usr/bin/clang++ compiler: /usr/bin/clang++
env: TOOLSET=clang CXXSTD=03,11 env: TOOLSET=clang CXXSTD=11
addons: addons:
apt: apt:
packages: packages:
@ -151,7 +151,7 @@ matrix:
- os: linux - os: linux
compiler: /usr/bin/clang++ compiler: /usr/bin/clang++
env: TOOLSET=clang CXXSTD=03,11 env: TOOLSET=clang CXXSTD=11
addons: addons:
apt: apt:
packages: packages:
@ -159,7 +159,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-3.5 compiler: clang++-3.5
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -171,7 +171,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-3.6 compiler: clang++-3.6
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -182,7 +182,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-3.7 compiler: clang++-3.7
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -193,7 +193,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-3.8 compiler: clang++-3.8
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -205,7 +205,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-3.9 compiler: clang++-3.9
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -217,7 +217,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-4.0 compiler: clang++-4.0
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -228,7 +228,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-5.0 compiler: clang++-5.0
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -239,7 +239,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-6.0 compiler: clang++-6.0
env: TOOLSET=clang CXXSTD=03,11,14,17,2a env: TOOLSET=clang CXXSTD=11,14,17,2a
addons: addons:
apt: apt:
packages: packages:
@ -250,7 +250,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-7 compiler: clang++-7
env: TOOLSET=clang CXXSTD=03,11,14,17,2a env: TOOLSET=clang CXXSTD=11,14,17,2a
addons: addons:
apt: apt:
packages: packages:
@ -261,7 +261,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-8 compiler: clang++-8
env: TOOLSET=clang CXXSTD=03,11,14,17,2a env: TOOLSET=clang CXXSTD=11,14,17,2a
addons: addons:
apt: apt:
packages: packages:
@ -272,7 +272,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-8 compiler: clang++-8
env: UBSAN=1 TOOLSET=clang CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1 env: UBSAN=1 TOOLSET=clang CXXSTD=11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1
addons: addons:
apt: apt:
packages: packages:
@ -283,7 +283,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-libc++ compiler: clang++-libc++
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
addons: addons:
apt: apt:
packages: packages:
@ -291,7 +291,7 @@ matrix:
- os: linux - os: linux
compiler: clang++-libc++ compiler: clang++-libc++
env: UBSAN=1 TOOLSET=clang CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1 env: UBSAN=1 TOOLSET=clang CXXSTD=11,14,1z UBSAN_OPTIONS=print_stacktrace=1
addons: addons:
apt: apt:
packages: packages:
@ -299,7 +299,7 @@ matrix:
- os: osx - os: osx
compiler: clang++ compiler: clang++
env: TOOLSET=clang CXXSTD=03,11,14,1z env: TOOLSET=clang CXXSTD=11,14,1z
install: install:
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true

View File

@ -26,19 +26,19 @@ environment:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
ADDPATH: C:\cygwin\bin; ADDPATH: C:\cygwin\bin;
TOOLSET: gcc TOOLSET: gcc
CXXSTD: 03,11,14,1z CXXSTD: 11,14,1z
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
ADDPATH: C:\cygwin64\bin; ADDPATH: C:\cygwin64\bin;
TOOLSET: gcc TOOLSET: gcc
CXXSTD: 03,11,14,1z CXXSTD: 11,14,1z
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
ADDPATH: C:\mingw\bin; ADDPATH: C:\mingw\bin;
TOOLSET: gcc TOOLSET: gcc
CXXSTD: 03,11,14,1z CXXSTD: 11,14,1z
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin; ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
TOOLSET: gcc TOOLSET: gcc
CXXSTD: 03,11,14,1z CXXSTD: 11,14,1z
install: install:
- set BOOST_BRANCH=develop - set BOOST_BRANCH=develop

View File

@ -10,6 +10,364 @@
// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the // William Kempf, Jesse Jones and Karl Nelson were all very helpful in the
// design of this library. // design of this library.
#include <boost/function/detail/config.hpp>
#if !BOOST_FUNCTION_ENABLE_CXX03
#ifndef BOOST_FUNCTION_HPP_INCLUDED
#define BOOST_FUNCTION_HPP_INCLUDED
#include <boost/ref.hpp>
#include <boost/function_equal.hpp>
#include <functional>
#include <type_traits>
namespace boost
{
#define BOOST_FUNCTION_TARGET_FIX(x)
using std::bad_function_call;
template<class S> class function: public std::function<S>
{
public:
function() = default;
function(function const&) = default;
function(function&&) = default;
using std::function<S>::function;
template<class T> function( boost::reference_wrapper<T> rt ): std::function<S>( std::ref( rt.get() ) )
{
}
function& operator=( function const& r ) = default;
function& operator=( function&& r ) = default;
template<class S2> function& operator=( function<S2> const& r )
{
std::function<S>::operator=( static_cast< std::function<S2> const& >( r ) );
return *this;
}
template<class S2> function& operator=( function<S2>&& r )
{
std::function<S>::operator=( static_cast< std::function<S2>&& >( r ) );
return *this;
}
template<class F, class E = typename std::enable_if< !std::is_integral<F>::value && !std::is_same<F, function>::value >::type > function& operator=( F f )
{
std::function<S>::operator=( std::move( f ) );
return *this;
}
function& operator=( std::nullptr_t f )
{
std::function<S>::operator=( f );
return *this;
}
template<class T> function& operator=( boost::reference_wrapper<T> rt )
{
std::function<S>::operator=( std::ref( rt.get() ) );
return *this;
}
bool empty() const noexcept
{
return ! *this;
}
void clear()
{
*this = nullptr;
}
template<class F, class A> void assign( F f, A )
{
this->operator=( std::move( f ) );
}
template<class F> F * target() noexcept
{
if( F * p = std::function<S>::template target<F>() )
{
return p;
}
if( std::reference_wrapper<F> * p = std::function<S>::template target< std::reference_wrapper<F> >() )
{
return std::addressof( p->get() );
}
return nullptr;
}
template<class F> F const * target() const noexcept
{
if( F const * p = std::function<S>::template target<F>() )
{
return p;
}
if( std::reference_wrapper<F> const * p = std::function<S>::template target< std::reference_wrapper<F> >() )
{
return std::addressof( p->get() );
}
return nullptr;
}
template<class F> bool contains( F const& f ) const noexcept
{
if( F const * fp = this->template target<F>() )
{
return function_equal( *fp, f );
}
else
{
return false;
}
}
};
template<class S, class F, class E = typename std::enable_if< !std::is_integral<F>::value && !std::is_same<F, std::nullptr_t>::value>::type> inline bool operator==( function<S> const & g, F f )
{
return g.contains( f );
}
template<class S, class F, class E = typename std::enable_if< !std::is_integral<F>::value && !std::is_same<F, std::nullptr_t>::value>::type> inline bool operator!=( function<S> const & g, F f )
{
return !g.contains( f );
}
template<class S, class F> inline bool operator==( function<S> const & g, boost::reference_wrapper<F> rf )
{
return g.template target<F>() == std::addressof( rf.get() );
}
template<class S, class F> inline bool operator!=( function<S> const & g, boost::reference_wrapper<F> rf )
{
return g.template target<F>() != std::addressof( rf.get() );
}
template<class S, class F, class E = typename std::enable_if< !std::is_integral<F>::value && !std::is_same<F, std::nullptr_t>::value>::type> inline bool operator==( F f, function<S> const & g )
{
return g.contains( f );
}
template<class S, class F, class E = typename std::enable_if< !std::is_integral<F>::value && !std::is_same<F, std::nullptr_t>::value>::type> inline bool operator!=( F f, function<S> const & g )
{
return !g.contains( f );
}
template<class S, class F> inline bool operator==( boost::reference_wrapper<F> rf, function<S> const & g )
{
return g.template target<F>() == std::addressof( rf.get() );
}
template<class S, class F> inline bool operator!=( boost::reference_wrapper<F> rf, function<S> const & g )
{
return g.template target<F>() != std::addressof( rf.get() );
}
namespace detail
{
template<class T1, class T2> struct is_similar
{
BOOST_STATIC_CONSTANT( bool, value = false );
};
template<template<class...> class L, class... T1, class... T2> struct is_similar< L<T1...>, L<T2...> >
{
BOOST_STATIC_CONSTANT( bool, value = true );
};
} // namespace detail
#define BOOST_FUNCTION_N_COMMON \
\
using base_type::base_type;\
\
template<class F, class E = typename std::enable_if< !std::is_integral<F>::value && !detail::is_similar<F, this_type>::value >::type > this_type& operator=( F f )\
{\
base_type::operator=( std::move( f ) );\
return *this;\
}\
\
this_type& operator=( std::nullptr_t f )\
{\
base_type::operator=( f );\
return *this;\
}\
\
template<class S2> this_type& operator=( boost::function<S2> const& r )\
{\
base_type::operator=( r );\
return *this;\
}\
\
template<class S2> this_type& operator=( boost::function<S2>&& r )\
{\
base_type::operator=( std::move( r ) );\
return *this;\
}
template<typename R> class function0: public function<R()>
{
private:
typedef function0 this_type;
typedef function<R()> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1> class function1: public function<R(T1)>
{
private:
typedef function1 this_type;
typedef function<R(T1)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2> class function2: public function<R(T1, T2)>
{
private:
typedef function2 this_type;
typedef function<R(T1, T2)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3> class function3: public function<R(T1, T2, T3)>
{
private:
typedef function3 this_type;
typedef function<R(T1, T2, T3)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3, typename T4> class function4: public function<R(T1, T2, T3, T4)>
{
private:
typedef function4 this_type;
typedef function<R(T1, T2, T3, T4)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3, typename T4, typename T5> class function5: public function<R(T1, T2, T3, T4, T5)>
{
private:
typedef function5 this_type;
typedef function<R(T1, T2, T3, T4, T5)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> class function6: public function<R(T1, T2, T3, T4, T5, T6)>
{
private:
typedef function6 this_type;
typedef function<R(T1, T2, T3, T4, T5, T6)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> class function7: public function<R(T1, T2, T3, T4, T5, T6, T7)>
{
private:
typedef function7 this_type;
typedef function<R(T1, T2, T3, T4, T5, T6, T7)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> class function8: public function<R(T1, T2, T3, T4, T5, T6, T7, T8)>
{
private:
typedef function8 this_type;
typedef function<R(T1, T2, T3, T4, T5, T6, T7, T8)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> class function9: public function<R(T1, T2, T3, T4, T5, T6, T7, T8, T9)>
{
private:
typedef function9 this_type;
typedef function<R(T1, T2, T3, T4, T5, T6, T7, T8, T9)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10> class function10: public function<R(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>
{
private:
typedef function10 this_type;
typedef function<R(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
template<typename R, typename... A> class function30: public function<R(A...)>
{
private:
typedef function30 this_type;
typedef function<R(A...)> base_type;
public:
BOOST_FUNCTION_N_COMMON
};
} // namespace boost
#endif // #ifndef BOOST_FUNCTION_HPP_INCLUDED
#else
#ifndef BOOST_FUNCTION_MAX_ARGS #ifndef BOOST_FUNCTION_MAX_ARGS
# define BOOST_FUNCTION_MAX_ARGS 10 # define BOOST_FUNCTION_MAX_ARGS 10
#endif // BOOST_FUNCTION_MAX_ARGS #endif // BOOST_FUNCTION_MAX_ARGS
@ -72,3 +430,5 @@
#endif #endif
#endif // !defined(BOOST_FUNCTION_MAX_ARGS_DEFINED) || (BOOST_FUNCTION_MAX_ARGS_DEFINED != BOOST_FUNCTION_MAX_ARGS) #endif // !defined(BOOST_FUNCTION_MAX_ARGS_DEFINED) || (BOOST_FUNCTION_MAX_ARGS_DEFINED != BOOST_FUNCTION_MAX_ARGS)
#endif

View File

@ -0,0 +1,12 @@
// Copyright 2019 Peter Dimov
// Use, modification and distribution is subject to 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
#ifndef BOOST_FUNCTION_DETAIL_CONFIG_HPP_INCLUDED
#define BOOST_FUNCTION_DETAIL_CONFIG_HPP_INCLUDED
#if !defined(BOOST_FUNCTION_ENABLE_CXX03)
# define BOOST_FUNCTION_ENABLE_CXX03 0
#endif
#endif // #ifndef BOOST_FUNCTION_DETAIL_CONFIG_HPP_INCLUDED

View File

@ -7,6 +7,10 @@
// For more information, see http://www.boost.org // For more information, see http://www.boost.org
#include <boost/function/detail/config.hpp>
#if BOOST_FUNCTION_ENABLE_CXX03
#if BOOST_FUNCTION_NUM_ARGS == 0 #if BOOST_FUNCTION_NUM_ARGS == 0
# undef BOOST_FUNCTION_MAX_ARGS_DEFINED # undef BOOST_FUNCTION_MAX_ARGS_DEFINED
# define BOOST_FUNCTION_MAX_ARGS_DEFINED 0 # define BOOST_FUNCTION_MAX_ARGS_DEFINED 0
@ -367,3 +371,5 @@
#else #else
# error Cannot handle Boost.Function objects that accept more than 50 arguments! # error Cannot handle Boost.Function objects that accept more than 50 arguments!
#endif #endif
#endif

View File

@ -9,6 +9,7 @@
#ifndef BOOST_FUNCTION_FWD_HPP #ifndef BOOST_FUNCTION_FWD_HPP
#define BOOST_FUNCTION_FWD_HPP #define BOOST_FUNCTION_FWD_HPP
#include <boost/config.hpp> #include <boost/config.hpp>
#include <boost/function/detail/config.hpp>
#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG) #if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
// Work around a compiler bug. // Work around a compiler bug.
@ -24,9 +25,22 @@ namespace boost { namespace python { namespace objects {
# define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX # define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
#endif #endif
#if !BOOST_FUNCTION_ENABLE_CXX03
# include <functional>
#endif
namespace boost { namespace boost {
#if BOOST_FUNCTION_ENABLE_CXX03
class bad_function_call; class bad_function_call;
#else
using std::bad_function_call;
#endif
#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX) #if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
// Preferred syntax // Preferred syntax
template<typename Signature> class function; template<typename Signature> class function;

View File

@ -47,8 +47,8 @@ lib mixed_cxxstd : mixed_cxxstd.cpp : <link>shared:<define>MIXED_CXXSTD_DYN_LINK
run test_mixed_cxxstd.cpp mixed_cxxstd : : : <link>shared : mixed_cxxstd_shared ; run test_mixed_cxxstd.cpp mixed_cxxstd : : : <link>shared : mixed_cxxstd_shared ;
run test_mixed_cxxstd.cpp mixed_cxxstd : : : <link>static : mixed_cxxstd_static ; run test_mixed_cxxstd.cpp mixed_cxxstd : : : <link>static : mixed_cxxstd_static ;
run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>98 : : : <link>shared : mixed_cxxstd_shared_98 ; #run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>98 : : : <link>shared : mixed_cxxstd_shared_98 ;
run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>98 : : : <link>static : mixed_cxxstd_static_98 ; #run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>98 : : : <link>static : mixed_cxxstd_static_98 ;
run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>0x : : : <link>shared : mixed_cxxstd_shared_0x ; run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>0x : : : <link>shared : mixed_cxxstd_shared_0x ;
run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>0x : : : <link>static : mixed_cxxstd_static_0x ; run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>0x : : : <link>static : mixed_cxxstd_static_0x ;
@ -63,8 +63,8 @@ lib return_function : return_function.cpp : <link>shared:<define>RETURN_FUNCTION
run test_return_function.cpp return_function : : : <link>shared : return_function_shared ; run test_return_function.cpp return_function : : : <link>shared : return_function_shared ;
run test_return_function.cpp return_function : : : <link>static : return_function_static ; run test_return_function.cpp return_function : : : <link>static : return_function_static ;
run test_return_function.cpp return_function/<cxxstd>98 : : : <link>shared : return_function_shared_98 ; #run test_return_function.cpp return_function/<cxxstd>98 : : : <link>shared : return_function_shared_98 ;
run test_return_function.cpp return_function/<cxxstd>98 : : : <link>static : return_function_static_98 ; #run test_return_function.cpp return_function/<cxxstd>98 : : : <link>static : return_function_static_98 ;
run test_return_function.cpp return_function/<cxxstd>0x : : : <link>shared : return_function_shared_0x ; run test_return_function.cpp return_function/<cxxstd>0x : : : <link>shared : return_function_shared_0x ;
run test_return_function.cpp return_function/<cxxstd>0x : : : <link>static : return_function_static_0x ; run test_return_function.cpp return_function/<cxxstd>0x : : : <link>static : return_function_static_0x ;

View File

@ -79,8 +79,10 @@ int main()
function2<int, int, int> f; function2<int, int, int> f;
f.assign( plus_int<disable_small_object_optimization>(), counting_allocator<int>() ); f.assign( plus_int<disable_small_object_optimization>(), counting_allocator<int>() );
f.clear(); f.clear();
#if BOOST_FUNCTION_ENABLE_CXX03
BOOST_TEST_EQ( alloc_count, 1 ); BOOST_TEST_EQ( alloc_count, 1 );
BOOST_TEST_EQ( dealloc_count, 1 ); BOOST_TEST_EQ( dealloc_count, 1 );
#endif
alloc_count = 0; alloc_count = 0;
dealloc_count = 0; dealloc_count = 0;
f.assign( plus_int<enable_small_object_optimization>(), counting_allocator<int>() ); f.assign( plus_int<enable_small_object_optimization>(), counting_allocator<int>() );
@ -106,8 +108,10 @@ int main()
dealloc_count = 0; dealloc_count = 0;
fv.assign( DoNothing<disable_small_object_optimization>(), counting_allocator<int>() ); fv.assign( DoNothing<disable_small_object_optimization>(), counting_allocator<int>() );
fv.clear(); fv.clear();
#if BOOST_FUNCTION_ENABLE_CXX03
BOOST_TEST_EQ( alloc_count, 1 ); BOOST_TEST_EQ( alloc_count, 1 );
BOOST_TEST_EQ( dealloc_count, 1 ); BOOST_TEST_EQ( dealloc_count, 1 );
#endif
alloc_count = 0; alloc_count = 0;
dealloc_count = 0; dealloc_count = 0;
fv.assign( DoNothing<enable_small_object_optimization>(), counting_allocator<int>() ); fv.assign( DoNothing<enable_small_object_optimization>(), counting_allocator<int>() );

View File

@ -96,7 +96,7 @@ static void target_test()
BOOST_CHECK(!f.target<int (*)()>()); BOOST_CHECK(!f.target<int (*)()>());
BOOST_CHECK(f.target<const Seventeen>()); BOOST_CHECK(f.target<const Seventeen>());
BOOST_CHECK(f.target<const Seventeen>() == &const_seventeen); BOOST_CHECK(f.target<const Seventeen>() == &const_seventeen);
BOOST_CHECK(f.target<const volatile Seventeen>()); // BOOST_CHECK(f.target<const volatile Seventeen>());
BOOST_CHECK(!f.target<Seventeen>()); BOOST_CHECK(!f.target<Seventeen>());
BOOST_CHECK(!f.target<volatile Seventeen>()); BOOST_CHECK(!f.target<volatile Seventeen>());
} }

View File

@ -9,6 +9,7 @@
#include <boost/function.hpp> #include <boost/function.hpp>
#include <boost/core/lightweight_test.hpp> #include <boost/core/lightweight_test.hpp>
#include <boost/config/workaround.hpp>
#include <functional> #include <functional>
#include <string> #include <string>
#include <utility> #include <utility>
@ -653,14 +654,14 @@ static void test_empty_ref()
f2(); f2();
BOOST_ERROR("Exception didn't throw for reference to empty function."); BOOST_ERROR("Exception didn't throw for reference to empty function.");
} }
catch(std::runtime_error const&) {} catch(boost::bad_function_call const&) {}
f1 = dummy; f1 = dummy;
try { try {
f2(); f2();
} }
catch(std::runtime_error const&) { catch(boost::bad_function_call const&) {
BOOST_ERROR("Error calling referenced function."); BOOST_ERROR("Error calling referenced function.");
} }
} }