mirror of
https://github.com/boostorg/function.git
synced 2026-01-29 19:42:09 +00:00
Compare commits
39 Commits
pr/mloskot
...
feature/us
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd79ba8c8b | ||
|
|
f3e4ed2481 | ||
|
|
a7c28f6117 | ||
|
|
8ec9323003 | ||
|
|
c39ca938a6 | ||
|
|
4b25a75c03 | ||
|
|
5682111fad | ||
|
|
1694b32e1b | ||
|
|
eaf2151263 | ||
|
|
d9043b76d6 | ||
|
|
2e2c44f070 | ||
|
|
7f69508eac | ||
|
|
6d811a2e72 | ||
|
|
3f6b2b6f56 | ||
|
|
439d64d8a8 | ||
|
|
3f46081c59 | ||
|
|
17716b63f2 | ||
|
|
b6b0568c88 | ||
|
|
babdbe500d | ||
|
|
db39532c45 | ||
|
|
eb09bb6fec | ||
|
|
ccc66b34d9 | ||
|
|
e7952cb242 | ||
|
|
57f4171c77 | ||
|
|
30f31f894c | ||
|
|
bfb0e4701e | ||
|
|
7b11b52e62 | ||
|
|
0a1a33a443 | ||
|
|
79045752e0 | ||
|
|
b149dba678 | ||
|
|
cd91278477 | ||
|
|
c18d123137 | ||
|
|
3bc2478a95 | ||
|
|
af15ab966e | ||
|
|
161f7557e7 | ||
|
|
f22fa49e07 | ||
|
|
5f93559650 | ||
|
|
5b2acbc175 | ||
|
|
755d3c2001 |
450
.travis.yml
450
.travis.yml
@@ -1,158 +1,322 @@
|
|||||||
# Copyright 2016 Peter Dimov
|
# Copyright 2016-2019 Peter Dimov
|
||||||
# Copyright 2017, 2018 James E. King III
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
# 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)
|
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#
|
|
||||||
# Generic Travis CI build script for boostorg repositories
|
|
||||||
#
|
|
||||||
# Instructions for customizing this script for your library:
|
|
||||||
#
|
|
||||||
# 1. Customize the compilers and language levels you want in the 'jobs'.
|
|
||||||
# 2. If you have more than include/, src/, test/, example/, examples/, or
|
|
||||||
# tools/ directories, modify your Travis CI project and add the environment
|
|
||||||
# variable DEPINST. For example if your build uses code in "bench/" and
|
|
||||||
# "fog/" directories, then set DEPINST to the following:
|
|
||||||
# --include bench --include fog
|
|
||||||
# 3. If you want to enable Coverity Scan, you need to provide the environment
|
|
||||||
# variables COVERITY_SCAN_TOKEN and COVERITY_SCAN_NOTIFICATION_EMAIL in
|
|
||||||
# your github settings.
|
|
||||||
# 4. Enable pull request builds in your boostorg/<library> account.
|
|
||||||
#
|
|
||||||
# That's it - the scripts will do everything else for you.
|
|
||||||
|
|
||||||
sudo: false
|
|
||||||
dist: trusty
|
|
||||||
language: cpp
|
language: cpp
|
||||||
|
|
||||||
env:
|
sudo: false
|
||||||
global:
|
|
||||||
# see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties
|
|
||||||
# to use the default for a given environment, comment it out; recommend you build debug and release however..
|
|
||||||
# - B2_ADDRESS_MODEL=address-model=64,32
|
|
||||||
# - B2_LINK=link=shared,static
|
|
||||||
# - B2_THREADING=threading=multi,single
|
|
||||||
- B2_VARIANT=variant=release,debug
|
|
||||||
|
|
||||||
install:
|
dist: trusty
|
||||||
- git clone https://github.com/jeking3/boost-ci.git boost-ci
|
|
||||||
- cp -pr boost-ci/ci boost-ci/.codecov.yml .
|
|
||||||
- source ci/travis/install.sh
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- binutils-gold
|
|
||||||
- gdb
|
|
||||||
- libc6-dbg
|
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- develop
|
|
||||||
- master
|
- master
|
||||||
|
- develop
|
||||||
|
- /feature\/.*/
|
||||||
|
|
||||||
|
env:
|
||||||
|
matrix:
|
||||||
|
- BOGUS_JOB=true
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- env: BOGUS_JOB=true
|
||||||
|
|
||||||
|
include:
|
||||||
|
- os: linux
|
||||||
|
compiler: g++
|
||||||
|
env: TOOLSET=gcc CXXSTD=11
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.4
|
||||||
|
env: TOOLSET=gcc CXXSTD=0x
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.4
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.6
|
||||||
|
env: TOOLSET=gcc CXXSTD=0x
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.6
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.7
|
||||||
|
env: TOOLSET=gcc CXXSTD=11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.8
|
||||||
|
env: TOOLSET=gcc CXXSTD=11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.9
|
||||||
|
env: TOOLSET=gcc CXXSTD=11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-5
|
||||||
|
env: TOOLSET=gcc CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-5
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-6
|
||||||
|
env: TOOLSET=gcc CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-6
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-7
|
||||||
|
env: TOOLSET=gcc CXXSTD=11,14,17
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-8
|
||||||
|
env: TOOLSET=gcc CXXSTD=11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-9
|
||||||
|
env: TOOLSET=gcc CXXSTD=11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-7
|
||||||
|
env: UBSAN=1 TOOLSET=gcc CXXSTD=11,14,17 UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++
|
||||||
|
env: TOOLSET=clang CXXSTD=11
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: /usr/bin/clang++
|
||||||
|
env: TOOLSET=clang CXXSTD=11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.3
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: /usr/bin/clang++
|
||||||
|
env: TOOLSET=clang CXXSTD=11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.4
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.5
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.5
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.5
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.6
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.6
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.6
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.7
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.7
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.8
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.8
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.8
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.9
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.9
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.9
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-4.0
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-4.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-4.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-5.0
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-6.0
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-6.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-6.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-7
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-7
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-8
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-8
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-8
|
||||||
|
env: UBSAN=1 TOOLSET=clang CXXSTD=11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-8
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-libc++
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- libc++-dev
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-libc++
|
||||||
|
env: UBSAN=1 TOOLSET=clang CXXSTD=11,14,1z UBSAN_OPTIONS=print_stacktrace=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- libc++-dev
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
compiler: clang++
|
||||||
|
env: TOOLSET=clang CXXSTD=11,14,1z
|
||||||
|
|
||||||
|
install:
|
||||||
|
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
|
||||||
|
- cd ..
|
||||||
|
- git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
|
||||||
|
- cd boost-root
|
||||||
|
- git submodule update --init tools/boostdep
|
||||||
|
- cp -r $TRAVIS_BUILD_DIR/* libs/function
|
||||||
|
- python tools/boostdep/depinst/depinst.py function
|
||||||
|
- ./bootstrap.sh
|
||||||
|
- ./b2 headers
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- cd $BOOST_ROOT/libs/$SELF
|
- |-
|
||||||
- ci/travis/build.sh
|
echo "using $TOOLSET : : $TRAVIS_COMPILER ;" > ~/user-config.jam
|
||||||
|
- ./b2 -j3 libs/function/test toolset=$TOOLSET cxxstd=$CXXSTD variant=debug,release ${UBSAN:+cxxflags=-fsanitize=undefined cxxflags=-fno-sanitize-recover=undefined linkflags=-fsanitize=undefined debug-symbols=on} ${LINKFLAGS:+linkflags=$LINKFLAGS}
|
||||||
#
|
|
||||||
# Default toolsets in Ubuntu
|
|
||||||
#
|
|
||||||
# trusty xenial bionic
|
|
||||||
# 14.04 16.04 18.04
|
|
||||||
# ------ ------ ------
|
|
||||||
# clang 3.4 3.8 6.0
|
|
||||||
# gcc 4.8.2 5.3.1 7.3.0
|
|
||||||
#
|
|
||||||
|
|
||||||
anchors:
|
|
||||||
clang-34: &clang-34 { apt: { packages: [ "clang-3.4" ], sources: [ "llvm-toolchain-trusty-3.4" ] } }
|
|
||||||
clang-38: &clang-38 { apt: { packages: [ "clang-3.8" ], sources: [ "llvm-toolchain-trusty-3.8" ] } }
|
|
||||||
clang-4: &clang-4 { apt: { packages: [ "clang-4.0" ], sources: [ "llvm-toolchain-trusty-4.0" ] } }
|
|
||||||
clang-5: &clang-5 { apt: { packages: [ "clang-5.0" ], sources: [ "llvm-toolchain-trusty-5.0" ] } }
|
|
||||||
clang-6: &clang-6 { apt: { packages: [ "clang-6.0",
|
|
||||||
"libstdc++-7-dev",
|
|
||||||
"valgrind" ], sources: [ "llvm-toolchain-trusty-6.0",
|
|
||||||
"ubuntu-toolchain-r-test" ] } }
|
|
||||||
gcc-44: &gcc-44 { apt: { packages: [ "g++-4.4" ], sources: [ "ubuntu-toolchain-r-test" ] } }
|
|
||||||
gcc-46: &gcc-46 { apt: { packages: [ "g++-4.6" ], sources: [ "ubuntu-toolchain-r-test" ] } }
|
|
||||||
gcc-48: &gcc-48 { apt: { packages: [ "g++-4.8" ], sources: [ "ubuntu-toolchain-r-test" ] } }
|
|
||||||
gcc-5: &gcc-5 { apt: { packages: [ "g++-5" ], sources: [ "ubuntu-toolchain-r-test" ] } }
|
|
||||||
gcc-6: &gcc-6 { apt: { packages: [ "g++-6" ], sources: [ "ubuntu-toolchain-r-test" ] } }
|
|
||||||
gcc-7: &gcc-7 { apt: { packages: [ "g++-7" ], sources: [ "ubuntu-toolchain-r-test" ] } }
|
|
||||||
gcc-8: &gcc-8 { apt: { packages: [ "g++-8" ], sources: [ "ubuntu-toolchain-r-test" ] } }
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
# libstdc++
|
|
||||||
- { os: "linux", env: [ "TOOLSET=gcc-4.4", "CXXSTD=98,0x" ], addons: *gcc-44 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=gcc-4.6", "CXXSTD=03,0x" ], addons: *gcc-46 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=gcc-4.8", "CXXSTD=03,11" ], addons: *gcc-48 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=gcc-5", "CXXSTD=03,11" ], addons: *gcc-5 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=gcc-6", "CXXSTD=03,11,14" ], addons: *gcc-6 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=gcc-7", "CXXSTD=03,11,14,17" ], addons: *gcc-7 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=gcc-8", "CXXSTD=03,11,14,17,2a" ], addons: *gcc-8 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=clang-3.4", "CXXSTD=03,11,14" ], addons: *clang-34 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=clang-3.8", "CXXSTD=03,11,14" ], addons: *clang-38 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=clang-4.0", "CXXSTD=03,11,14" ], addons: *clang-4 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=clang-5.0", "CXXSTD=03,11,14,17" ], addons: *clang-5 }
|
|
||||||
- { os: "linux", env: [ "TOOLSET=clang-6.0", "CXXSTD=03,11,14,17,2a" ], addons: *clang-6 }
|
|
||||||
# libc++
|
|
||||||
# the rvm environment on osx is taking over basic commands like "cd" and breaking things
|
|
||||||
# - { os: "osx" , env: [ "COMMENT=libc++",
|
|
||||||
# "TOOLSET=clang", "CXXSTD=03,11,14" ] }
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
env:
|
|
||||||
- COMMENT=codecov.io
|
|
||||||
- TOOLSET=gcc-7
|
|
||||||
addons: *gcc-7
|
|
||||||
script:
|
|
||||||
- pushd /tmp && git clone https://github.com/linux-test-project/lcov.git && export PATH=/tmp/lcov/bin:$PATH && which lcov && lcov --version && popd
|
|
||||||
- cd $BOOST_ROOT/libs/$SELF
|
|
||||||
- ci/travis/codecov.sh
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
env:
|
|
||||||
- COMMENT=cppcheck
|
|
||||||
script:
|
|
||||||
- cd $BOOST_ROOT/libs/$SELF
|
|
||||||
- ci/travis/cppcheck.sh
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
env:
|
|
||||||
- COMMENT=ubsan
|
|
||||||
- B2_VARIANT=variant=debug
|
|
||||||
- TOOLSET=gcc-8
|
|
||||||
- CXXFLAGS="cxxflags=-fno-omit-frame-pointer cxxflags=-fsanitize=undefined cxxflags=-fno-sanitize-recover=undefined"
|
|
||||||
- LINKFLAGS="linkflags=-fsanitize=undefined linkflags=-fno-sanitize-recover=undefined linkflags=-fuse-ld=gold"
|
|
||||||
- UBSAN_OPTIONS=print_stacktrace=1
|
|
||||||
addons: *gcc-8
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
env:
|
|
||||||
- COMMENT=valgrind
|
|
||||||
- TOOLSET=clang-6.0
|
|
||||||
- CXXSTD=03
|
|
||||||
- B2_VARIANT=variant=debug
|
|
||||||
- TESTFLAGS=testing.launcher=valgrind
|
|
||||||
- VALGRIND_OPTS=--error-exitcode=1
|
|
||||||
addons: *clang-6
|
|
||||||
|
|
||||||
#################### Jobs to run on pushes to master, develop ###################
|
|
||||||
|
|
||||||
# Coverity Scan
|
|
||||||
- os: linux
|
|
||||||
if: (env(COVERITY_SCAN_NOTIFICATION_EMAIL) IS present) AND (branch IN (develop, master)) AND (type IN (cron, push))
|
|
||||||
env:
|
|
||||||
- COMMENT="Coverity Scan"
|
|
||||||
- TOOLSET=gcc-7
|
|
||||||
addons: *gcc-7
|
|
||||||
script:
|
|
||||||
- cd $BOOST_ROOT/libs/$SELF
|
|
||||||
- ci/travis/coverity.sh
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
false
|
on_success: always
|
||||||
|
|
||||||
|
|||||||
28
CMakeLists.txt
Normal file
28
CMakeLists.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Copyright 2019 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
|
||||||
|
|
||||||
|
# Partial (add_subdirectory only) and experimental CMake support
|
||||||
|
# Subject to change; please do not rely on the contents of this file yet
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
project(BoostFunction LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_library(boost_function INTERFACE)
|
||||||
|
add_library(Boost::function ALIAS boost_function)
|
||||||
|
|
||||||
|
target_include_directories(boost_function INTERFACE include)
|
||||||
|
|
||||||
|
target_link_libraries(boost_function
|
||||||
|
INTERFACE
|
||||||
|
Boost::assert
|
||||||
|
Boost::bind
|
||||||
|
Boost::config
|
||||||
|
Boost::core
|
||||||
|
Boost::integer
|
||||||
|
Boost::preprocessor
|
||||||
|
Boost::throw_exception
|
||||||
|
Boost::type_index
|
||||||
|
Boost::type_traits
|
||||||
|
Boost::typeof
|
||||||
|
)
|
||||||
11
Jamfile
11
Jamfile
@@ -1,11 +0,0 @@
|
|||||||
# Boost.Function Library Jamfile
|
|
||||||
#
|
|
||||||
# Copyright (c) 2018 James E. King III
|
|
||||||
#
|
|
||||||
# Use, modification, and distribution are 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)
|
|
||||||
|
|
||||||
# please order by name to ease maintenance
|
|
||||||
build-project example ;
|
|
||||||
build-project test ;
|
|
||||||
23
LICENSE
23
LICENSE
@@ -1,23 +0,0 @@
|
|||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person or organization
|
|
||||||
obtaining a copy of the software and accompanying documentation covered by
|
|
||||||
this license (the "Software") to use, reproduce, display, distribute,
|
|
||||||
execute, and transmit the Software, and to prepare derivative works of the
|
|
||||||
Software, and to permit third-parties to whom the Software is furnished to
|
|
||||||
do so, all subject to the following:
|
|
||||||
|
|
||||||
The copyright notices in the Software and this entire statement, including
|
|
||||||
the above license grant, this restriction and the following disclaimer,
|
|
||||||
must be included in all copies of the Software, in whole or in part, and
|
|
||||||
all derivative works of the Software, unless such copies or derivative
|
|
||||||
works are solely in the form of machine-executable object code generated by
|
|
||||||
a source language processor.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
||||||
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
||||||
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
||||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
||||||
40
README.md
40
README.md
@@ -1,34 +1,18 @@
|
|||||||
Function, part of collection of the [Boost C++ Libraries](http://github.com/boostorg), contains a family of class templates that are function object wrappers.
|
# Boost.Function, a polymorphic function wrapper
|
||||||
|
|
||||||
### License
|
[Boost.Function](http://boost.org/libs/function), part of the
|
||||||
|
[Boost C++ Libraries](http://boost.org), is the original implementation of the
|
||||||
|
polymorphic function wrapper `boost::function`, which was eventually accepted
|
||||||
|
into the C++11 standard as [`std::function`](https://en.cppreference.com/w/cpp/utility/functional/function).
|
||||||
|
|
||||||
Distributed under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
|
## Currently supported compilers
|
||||||
|
|
||||||
### Properties
|
* g++ 4.4 or later
|
||||||
|
* clang++ 3.3 or later
|
||||||
|
* Visual Studio 2005-2017
|
||||||
|
|
||||||
* C++03
|
Tested on [Travis](https://travis-ci.org/boostorg/function/) and [Appveyor](https://ci.appveyor.com/project/pdimov/function/).
|
||||||
* Header-Only
|
|
||||||
|
|
||||||
### Build Status
|
## License
|
||||||
|
|
||||||
Branch | Travis | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests |
|
|
||||||
:-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- |
|
|
||||||
[`master`](https://github.com/boostorg/function/tree/master) | [](https://travis-ci.org/boostorg/function) | [](https://ci.appveyor.com/project/jeking3/function-d036y/branch/master) | [](https://scan.coverity.com/projects/boostorg-function) | [](https://codecov.io/gh/boostorg/function/branch/master)| [](https://pdimov.github.io/boostdep-report/master/function.html) | [](http://www.boost.org/doc/libs/master/doc/html/function.html) | [](http://www.boost.org/development/tests/master/developer/function.html)
|
|
||||||
[`develop`](https://github.com/boostorg/function/tree/develop) | [](https://travis-ci.org/boostorg/function) | [](https://ci.appveyor.com/project/jeking3/function-d036y/branch/develop) | [](https://scan.coverity.com/projects/boostorg-function) | [](https://codecov.io/gh/boostorg/function/branch/develop) | [](https://pdimov.github.io/boostdep-report/develop/function.html) | [](http://www.boost.org/doc/libs/develop/doc/html/function.html) | [](http://www.boost.org/development/tests/develop/developer/function.html)
|
|
||||||
|
|
||||||
### Directories
|
|
||||||
|
|
||||||
| Name | Purpose |
|
|
||||||
| ----------- | ------------------------------ |
|
|
||||||
| `doc` | documentation |
|
|
||||||
| `example` | examples |
|
|
||||||
| `include` | headers |
|
|
||||||
| `test` | unit tests |
|
|
||||||
|
|
||||||
### More information
|
|
||||||
|
|
||||||
* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,boost-function)
|
|
||||||
* [Report bugs](https://github.com/boostorg/function/issues): Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well.
|
|
||||||
* Submit your patches as pull requests against **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
|
|
||||||
* Discussions about the library are held on the [Boost developers mailing list](http://www.boost.org/community/groups.html#main). Be sure to read the [discussion policy](http://www.boost.org/community/policy.html) before posting and add the `[function]` tag at the beginning of the subject line.
|
|
||||||
|
|
||||||
|
Distributed under the [Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).
|
||||||
|
|||||||
92
appveyor.yml
92
appveyor.yml
@@ -1,5 +1,4 @@
|
|||||||
# Copyright 2016, 2017 Peter Dimov
|
# Copyright 2016-2019 Peter Dimov
|
||||||
# Copyright (C) 2017, 2018 James E. King III
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
# 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)
|
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
@@ -9,73 +8,54 @@ shallow_clone: true
|
|||||||
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- develop
|
|
||||||
- master
|
- master
|
||||||
|
- develop
|
||||||
matrix:
|
- /feature\/.*/
|
||||||
allow_failures:
|
|
||||||
- MAYFAIL: true
|
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
global:
|
|
||||||
# see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties
|
|
||||||
# to use the default for a given environment, comment it out; recommend you build debug and release however..
|
|
||||||
# on Windows it is important to exercise all the possibilities, especially shared vs static
|
|
||||||
# B2_ADDRESS_MODEL: address-model=64,32
|
|
||||||
# B2_LINK: link=shared,static
|
|
||||||
# B2_THREADING: threading=multi,single
|
|
||||||
B2_VARIANT: variant=release,debug
|
|
||||||
CXXSTD: 03
|
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
- FLAVOR: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
TOOLSET: msvc-12.0,msvc-14.0
|
||||||
|
ADDRMD: 32,64
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
TOOLSET: msvc-14.1
|
TOOLSET: msvc-14.1
|
||||||
B2_ADDRESS_MODEL: address-model=64,32
|
CXXSTD: 14,17
|
||||||
- FLAVOR: Visual Studio 2015
|
ADDRMD: 32,64
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
TOOLSET: msvc-14.0
|
|
||||||
B2_ADDRESS_MODEL: address-model=64,32
|
|
||||||
- FLAVOR: Visual Studio 2010, 2012, 2013
|
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
|
||||||
TOOLSET: msvc-10.0,msvc-11.0,msvc-12.0
|
|
||||||
- FLAVOR: cygwin (32-bit)
|
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
|
||||||
ADDPATH: C:\cygwin\bin;
|
ADDPATH: C:\cygwin\bin;
|
||||||
B2_ADDRESS_MODEL: address-model=32
|
|
||||||
# https://github.com/boostorg/test/issues/144
|
|
||||||
DEFINES: define=_POSIX_C_SOURCE=200112L
|
|
||||||
THREADING: threadapi=pthread
|
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
- FLAVOR: cygwin (64-bit)
|
CXXSTD: 11,14,1z
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
ADDPATH: C:\cygwin64\bin;
|
ADDPATH: C:\cygwin64\bin;
|
||||||
B2_ADDRESS_MODEL: address-model=64
|
|
||||||
# https://github.com/boostorg/test/issues/144
|
|
||||||
DEFINES: define=_POSIX_C_SOURCE=200112L
|
|
||||||
THREADING: threadapi=pthread
|
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
- FLAVOR: mingw32
|
CXXSTD: 11,14,1z
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
ARCH: i686
|
ADDPATH: C:\mingw\bin;
|
||||||
B2_ADDRESS_MODEL: address-model=32
|
TOOLSET: gcc
|
||||||
SCRIPT: ci\appveyor\mingw.bat
|
CXXSTD: 11,14,1z
|
||||||
- FLAVOR: mingw64
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
||||||
ARCH: x86_64
|
TOOLSET: gcc
|
||||||
B2_ADDRESS_MODEL: address-model=64
|
CXXSTD: 11,14,1z
|
||||||
SCRIPT: ci\appveyor\mingw.bat
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- set SELF=%APPVEYOR_PROJECT_NAME:-=_%
|
- set BOOST_BRANCH=develop
|
||||||
- git clone https://github.com/jeking3/boost-ci.git C:\boost-ci
|
- if "%APPVEYOR_REPO_BRANCH%" == "master" set BOOST_BRANCH=master
|
||||||
- xcopy /s /e /q /i C:\boost-ci\ci .\ci
|
- cd ..
|
||||||
- ci\appveyor\install.bat
|
- git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||||
|
- cd boost-root
|
||||||
|
- git submodule update --init tools/boostdep
|
||||||
|
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\function\
|
||||||
|
- python tools/boostdep/depinst/depinst.py function
|
||||||
|
- cmd /c bootstrap
|
||||||
|
- b2 -d0 headers
|
||||||
|
|
||||||
build: off
|
build: off
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- set SELF=%APPVEYOR_PROJECT_NAME:-=_%
|
|
||||||
- PATH=%ADDPATH%%PATH%
|
- PATH=%ADDPATH%%PATH%
|
||||||
- IF DEFINED SCRIPT (call libs\%SELF%\%SCRIPT%) ELSE (b2 libs/%SELF% toolset=%TOOLSET% cxxstd=%CXXSTD% %CXXFLAGS% %DEFINES% %THREADING% %B2_ADDRESS_MODEL% %B2_LINK% %B2_THREADING% %B2_VARIANT% -j3)
|
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
||||||
|
- if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
|
||||||
|
- b2 -j3 libs/function/test toolset=%TOOLSET% %CXXSTD% %ADDRMD% variant=debug,release
|
||||||
|
|||||||
14
example/Jamfile
Normal file
14
example/Jamfile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Boost.Function Library example Jamfile
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 James E. King III
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
import ../../config/checks/config : requires ;
|
||||||
|
import testing ;
|
||||||
|
|
||||||
|
run bind1st.cpp : : : [ requires cxx98_binders ] ;
|
||||||
|
run int_div.cpp ;
|
||||||
|
run sum_avg.cpp ;
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# Boost.Function Library example Jamfile
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 James E. King III
|
|
||||||
#
|
|
||||||
# Distributed under the Boost Software License, Version 1.0. (See accompany-
|
|
||||||
# ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
import os ;
|
|
||||||
import testing ;
|
|
||||||
|
|
||||||
project
|
|
||||||
: requirements
|
|
||||||
;
|
|
||||||
|
|
||||||
test-suite "function-examples"
|
|
||||||
: [ run bind1st.cpp ]
|
|
||||||
[ run int_div.cpp ]
|
|
||||||
[ run sum_avg.cpp ]
|
|
||||||
;
|
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|||||||
12
include/boost/function/detail/config.hpp
Normal file
12
include/boost/function/detail/config.hpp
Normal 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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ namespace boost {
|
|||||||
} obj_ref;
|
} obj_ref;
|
||||||
};
|
};
|
||||||
|
|
||||||
union function_buffer
|
union BOOST_SYMBOL_VISIBLE function_buffer
|
||||||
{
|
{
|
||||||
// Type-specific union members
|
// Type-specific union members
|
||||||
mutable function_buffer_members members;
|
mutable function_buffer_members members;
|
||||||
@@ -396,16 +396,12 @@ namespace boost {
|
|||||||
functor_manager_operation_type op)
|
functor_manager_operation_type op)
|
||||||
{
|
{
|
||||||
typedef typename get_function_tag<functor_type>::type tag_type;
|
typedef typename get_function_tag<functor_type>::type tag_type;
|
||||||
switch (op) {
|
if (op == get_functor_type_tag) {
|
||||||
case get_functor_type_tag:
|
|
||||||
out_buffer.members.type.type = &boost::typeindex::type_id<functor_type>().type_info();
|
out_buffer.members.type.type = &boost::typeindex::type_id<functor_type>().type_info();
|
||||||
out_buffer.members.type.const_qualified = false;
|
out_buffer.members.type.const_qualified = false;
|
||||||
out_buffer.members.type.volatile_qualified = false;
|
out_buffer.members.type.volatile_qualified = false;
|
||||||
return;
|
} else {
|
||||||
|
|
||||||
default:
|
|
||||||
manager(in_buffer, out_buffer, op, tag_type());
|
manager(in_buffer, out_buffer, op, tag_type());
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -510,16 +506,12 @@ namespace boost {
|
|||||||
functor_manager_operation_type op)
|
functor_manager_operation_type op)
|
||||||
{
|
{
|
||||||
typedef typename get_function_tag<functor_type>::type tag_type;
|
typedef typename get_function_tag<functor_type>::type tag_type;
|
||||||
switch (op) {
|
if (op == get_functor_type_tag) {
|
||||||
case get_functor_type_tag:
|
|
||||||
out_buffer.members.type.type = &boost::typeindex::type_id<functor_type>().type_info();
|
out_buffer.members.type.type = &boost::typeindex::type_id<functor_type>().type_info();
|
||||||
out_buffer.members.type.const_qualified = false;
|
out_buffer.members.type.const_qualified = false;
|
||||||
out_buffer.members.type.volatile_qualified = false;
|
out_buffer.members.type.volatile_qualified = false;
|
||||||
return;
|
} else {
|
||||||
|
|
||||||
default:
|
|
||||||
manager(in_buffer, out_buffer, op, tag_type());
|
manager(in_buffer, out_buffer, op, tag_type());
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -710,7 +702,7 @@ public: // should be protected, but GCC 2.95.3 will fail to allow access
|
|||||||
* The bad_function_call exception class is thrown when a boost::function
|
* The bad_function_call exception class is thrown when a boost::function
|
||||||
* object is invoked
|
* object is invoked
|
||||||
*/
|
*/
|
||||||
class bad_function_call : public std::runtime_error
|
class BOOST_SYMBOL_VISIBLE bad_function_call : public std::runtime_error
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bad_function_call() : std::runtime_error("call to empty boost::function") {}
|
bad_function_call() : std::runtime_error("call to empty boost::function") {}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -349,9 +349,8 @@ namespace boost {
|
|||||||
typedef functor_manager<FunctionPtr> manager_type;
|
typedef functor_manager<FunctionPtr> manager_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename FunctionPtr,
|
template<typename FunctionPtr, typename Allocator,
|
||||||
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
|
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
|
||||||
typename Allocator>
|
|
||||||
struct apply_a
|
struct apply_a
|
||||||
{
|
{
|
||||||
typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
|
typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
|
||||||
@@ -384,9 +383,8 @@ namespace boost {
|
|||||||
typedef functor_manager<MemberPtr> manager_type;
|
typedef functor_manager<MemberPtr> manager_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename MemberPtr,
|
template<typename MemberPtr, typename Allocator,
|
||||||
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
|
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
|
||||||
typename Allocator>
|
|
||||||
struct apply_a
|
struct apply_a
|
||||||
{
|
{
|
||||||
typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER<
|
typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER<
|
||||||
@@ -419,9 +417,8 @@ namespace boost {
|
|||||||
typedef functor_manager<FunctionObj> manager_type;
|
typedef functor_manager<FunctionObj> manager_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename FunctionObj,
|
template<typename FunctionObj, typename Allocator,
|
||||||
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
|
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
|
||||||
typename Allocator>
|
|
||||||
struct apply_a
|
struct apply_a
|
||||||
{
|
{
|
||||||
typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
|
typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
|
||||||
@@ -453,9 +450,8 @@ namespace boost {
|
|||||||
typedef reference_manager<typename RefWrapper::type> manager_type;
|
typedef reference_manager<typename RefWrapper::type> manager_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename RefWrapper,
|
template<typename RefWrapper, typename Allocator,
|
||||||
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
|
typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
|
||||||
typename Allocator>
|
|
||||||
struct apply_a
|
struct apply_a
|
||||||
{
|
{
|
||||||
typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<
|
typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<
|
||||||
@@ -954,9 +950,8 @@ namespace boost {
|
|||||||
typedef typename boost::detail::function::get_function_tag<Functor>::type tag;
|
typedef typename boost::detail::function::get_function_tag<Functor>::type tag;
|
||||||
typedef boost::detail::function::BOOST_FUNCTION_GET_INVOKER<tag> get_invoker;
|
typedef boost::detail::function::BOOST_FUNCTION_GET_INVOKER<tag> get_invoker;
|
||||||
typedef typename get_invoker::
|
typedef typename get_invoker::
|
||||||
template apply_a<Functor, R BOOST_FUNCTION_COMMA
|
template apply_a<Functor, Allocator, R BOOST_FUNCTION_COMMA
|
||||||
BOOST_FUNCTION_TEMPLATE_ARGS,
|
BOOST_FUNCTION_TEMPLATE_ARGS>
|
||||||
Allocator>
|
|
||||||
handler_type;
|
handler_type;
|
||||||
|
|
||||||
typedef typename handler_type::invoker_type invoker_type;
|
typedef typename handler_type::invoker_type invoker_type;
|
||||||
|
|||||||
@@ -13,6 +13,6 @@
|
|||||||
"Programming"
|
"Programming"
|
||||||
],
|
],
|
||||||
"maintainers": [
|
"maintainers": [
|
||||||
"Douglas Gregor <dgregor -at- cs.indiana.edu>"
|
"Peter Dimov <pdimov -at- pdimov.com>"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import testing ;
|
|||||||
|
|
||||||
run function_test.cpp ;
|
run function_test.cpp ;
|
||||||
# /usr/include/c++/4.4/bits/shared_ptr.h:146: error: cannot use typeid with -fno-rtti
|
# /usr/include/c++/4.4/bits/shared_ptr.h:146: error: cannot use typeid with -fno-rtti
|
||||||
run function_test.cpp : : : <rtti>off <toolset>gcc-4.4,<cxxstd>0x:<build>no : function_test_no_rtti ;
|
run function_test.cpp : : : <rtti>off <toolset>gcc-4.4.7,<cxxstd>0x:<build>no : function_test_no_rtti ;
|
||||||
run function_n_test.cpp ;
|
run function_n_test.cpp ;
|
||||||
run allocator_test.cpp ;
|
run allocator_test.cpp ;
|
||||||
run stateless_test.cpp ;
|
run stateless_test.cpp ;
|
||||||
@@ -36,3 +36,40 @@ run nothrow_swap.cpp ;
|
|||||||
run rvalues_test.cpp ;
|
run rvalues_test.cpp ;
|
||||||
compile function_typeof_test.cpp ;
|
compile function_typeof_test.cpp ;
|
||||||
run result_arg_types_test.cpp ;
|
run result_arg_types_test.cpp ;
|
||||||
|
|
||||||
|
lib throw_bad_function_call : throw_bad_function_call.cpp : <link>shared:<define>THROW_BAD_FUNCTION_CALL_DYN_LINK=1 ;
|
||||||
|
|
||||||
|
run test_bad_function_call.cpp throw_bad_function_call : : : <link>shared : test_bad_function_call_shared ;
|
||||||
|
run test_bad_function_call.cpp throw_bad_function_call : : : <link>static : test_bad_function_call_static ;
|
||||||
|
|
||||||
|
lib mixed_cxxstd : mixed_cxxstd.cpp : <link>shared:<define>MIXED_CXXSTD_DYN_LINK=1 ;
|
||||||
|
|
||||||
|
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/<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>0x : : : <link>shared : mixed_cxxstd_shared_0x ;
|
||||||
|
run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>0x : : : <link>static : mixed_cxxstd_static_0x ;
|
||||||
|
|
||||||
|
local check14 = [ check-target-builds mixed_cxxstd/<cxxstd>14 : : <build>no ] ;
|
||||||
|
|
||||||
|
run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>14 : : : <link>shared $(check14) : mixed_cxxstd_shared_14 ;
|
||||||
|
run test_mixed_cxxstd.cpp mixed_cxxstd/<cxxstd>14 : : : <link>static $(check14) : mixed_cxxstd_static_14 ;
|
||||||
|
|
||||||
|
lib return_function : return_function.cpp : <link>shared:<define>RETURN_FUNCTION_DYN_LINK=1 ;
|
||||||
|
|
||||||
|
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/<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>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>14 : : : <link>shared $(check14) : return_function_shared_14 ;
|
||||||
|
run test_return_function.cpp return_function/<cxxstd>14 : : : <link>static $(check14) : return_function_static_14 ;
|
||||||
|
|
||||||
|
run quick.cpp ;
|
||||||
|
|||||||
@@ -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>() );
|
||||||
|
|||||||
49
test/cmake_subdir_test/CMakeLists.txt
Normal file
49
test/cmake_subdir_test/CMakeLists.txt
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Copyright 2018, 2019 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
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
project(cmake_subdir_test LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_subdirectory(../.. boostorg/function)
|
||||||
|
|
||||||
|
# boost_add_subdir
|
||||||
|
|
||||||
|
function(boost_add_subdir name)
|
||||||
|
|
||||||
|
add_subdirectory(../../../${name} boostorg/${name})
|
||||||
|
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# primary dependencies
|
||||||
|
|
||||||
|
boost_add_subdir(assert)
|
||||||
|
boost_add_subdir(bind)
|
||||||
|
boost_add_subdir(config)
|
||||||
|
boost_add_subdir(core)
|
||||||
|
boost_add_subdir(integer)
|
||||||
|
boost_add_subdir(preprocessor)
|
||||||
|
boost_add_subdir(throw_exception)
|
||||||
|
boost_add_subdir(type_index)
|
||||||
|
boost_add_subdir(type_traits)
|
||||||
|
boost_add_subdir(typeof)
|
||||||
|
|
||||||
|
# secondary dependencies
|
||||||
|
|
||||||
|
boost_add_subdir(static_assert)
|
||||||
|
boost_add_subdir(container_hash)
|
||||||
|
boost_add_subdir(smart_ptr)
|
||||||
|
boost_add_subdir(detail)
|
||||||
|
boost_add_subdir(move)
|
||||||
|
boost_add_subdir(predef)
|
||||||
|
|
||||||
|
# --target check
|
||||||
|
|
||||||
|
add_executable(quick ../quick.cpp)
|
||||||
|
target_link_libraries(quick Boost::function Boost::core)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
add_test(quick quick)
|
||||||
|
|
||||||
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)
|
||||||
@@ -5,10 +5,12 @@
|
|||||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
#include <boost/ref.hpp>
|
#include <boost/ref.hpp>
|
||||||
|
|
||||||
|
#define BOOST_CHECK BOOST_TEST
|
||||||
|
|
||||||
static int forty_two() { return 42; }
|
static int forty_two() { return 42; }
|
||||||
|
|
||||||
struct Seventeen
|
struct Seventeen
|
||||||
@@ -94,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>());
|
||||||
}
|
}
|
||||||
@@ -225,11 +227,11 @@ static void ref_equal_test()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_main(int, char*[])
|
int main()
|
||||||
{
|
{
|
||||||
target_test();
|
target_test();
|
||||||
equal_test();
|
equal_test();
|
||||||
ref_equal_test();
|
ref_equal_test();
|
||||||
|
|
||||||
return 0;
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,14 @@
|
|||||||
|
|
||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#define BOOST_CHECK BOOST_TEST
|
||||||
|
|
||||||
using namespace boost;
|
using namespace boost;
|
||||||
using std::string;
|
using std::string;
|
||||||
using std::negate;
|
using std::negate;
|
||||||
@@ -684,7 +686,7 @@ void test_construct_destroy_count()
|
|||||||
BOOST_CHECK(construction_count == destruction_count);
|
BOOST_CHECK(construction_count == destruction_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_main(int, char* [])
|
int main()
|
||||||
{
|
{
|
||||||
test_zero_args();
|
test_zero_args();
|
||||||
test_one_arg();
|
test_one_arg();
|
||||||
@@ -693,5 +695,5 @@ int test_main(int, char* [])
|
|||||||
test_member_functions();
|
test_member_functions();
|
||||||
test_ref();
|
test_ref();
|
||||||
test_construct_destroy_count();
|
test_construct_destroy_count();
|
||||||
return 0;
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,15 @@
|
|||||||
|
|
||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
#include <boost/config/workaround.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
#define BOOST_CHECK BOOST_TEST
|
||||||
|
|
||||||
using boost::function;
|
using boost::function;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
@@ -651,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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -792,7 +795,7 @@ static void test_move_semantics()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_main(int, char* [])
|
int main()
|
||||||
{
|
{
|
||||||
test_zero_args();
|
test_zero_args();
|
||||||
test_one_arg();
|
test_one_arg();
|
||||||
@@ -807,5 +810,5 @@ int test_main(int, char* [])
|
|||||||
test_move_semantics<function<void()> >();
|
test_move_semantics<function<void()> >();
|
||||||
test_move_semantics<boost::function0<void> >();
|
test_move_semantics<boost::function0<void> >();
|
||||||
|
|
||||||
return 0;
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,22 +7,12 @@
|
|||||||
|
|
||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
|
||||||
using namespace std;
|
void test()
|
||||||
using namespace boost;
|
|
||||||
|
|
||||||
int
|
|
||||||
test_main(int, char*[])
|
|
||||||
{
|
{
|
||||||
function0<int> f1;
|
boost::function0<int> f1;
|
||||||
function0<int> f2;
|
boost::function0<int> f2;
|
||||||
|
|
||||||
if (f1 == f2) {
|
if( f1 == f2 ) {}
|
||||||
}
|
|
||||||
|
|
||||||
BOOST_ERROR("This should not have compiled.");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,21 +7,12 @@
|
|||||||
|
|
||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace boost;
|
|
||||||
|
|
||||||
static int bad_fn(float f) { return static_cast<int>(f); }
|
static int bad_fn(float f) { return static_cast<int>(f); }
|
||||||
|
|
||||||
int
|
void test()
|
||||||
test_main(int, char*[])
|
|
||||||
{
|
{
|
||||||
function0<int> f1;
|
boost::function0<int> f1;
|
||||||
f1 = bad_fn;
|
f1 = bad_fn;
|
||||||
|
|
||||||
BOOST_ERROR("This should not have compiled.");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
42
test/mixed_cxxstd.cpp
Normal file
42
test/mixed_cxxstd.cpp
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
// Copyright 2018 Peter Dimov.
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if defined(MIXED_CXXSTD_DYN_LINK)
|
||||||
|
# define EXPORT BOOST_SYMBOL_EXPORT
|
||||||
|
#else
|
||||||
|
# define EXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXPORT void call_fn_1( boost::function<void()> const & fn )
|
||||||
|
{
|
||||||
|
fn();
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT void call_fn_2( boost::function<void(int)> const & fn )
|
||||||
|
{
|
||||||
|
fn( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT void call_fn_3( boost::function<void(int, int)> const & fn )
|
||||||
|
{
|
||||||
|
fn( 1, 2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT void call_fn_4( boost::function0<void> const & fn )
|
||||||
|
{
|
||||||
|
fn();
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT void call_fn_5( boost::function1<void, int> const & fn )
|
||||||
|
{
|
||||||
|
fn( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT void call_fn_6( boost::function2<void, int, int> const & fn )
|
||||||
|
{
|
||||||
|
fn( 1, 2 );
|
||||||
|
}
|
||||||
@@ -7,8 +7,10 @@
|
|||||||
|
|
||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
#define BOOST_CHECK BOOST_TEST
|
||||||
|
|
||||||
struct tried_to_copy { };
|
struct tried_to_copy { };
|
||||||
|
|
||||||
@@ -40,7 +42,7 @@ struct MaybeThrowOnCopy {
|
|||||||
|
|
||||||
bool MaybeThrowOnCopy::throwOnCopy = false;
|
bool MaybeThrowOnCopy::throwOnCopy = false;
|
||||||
|
|
||||||
int test_main(int, char* [])
|
int main()
|
||||||
{
|
{
|
||||||
boost::function0<int> f;
|
boost::function0<int> f;
|
||||||
boost::function0<int> g;
|
boost::function0<int> g;
|
||||||
@@ -56,5 +58,5 @@ int test_main(int, char* [])
|
|||||||
BOOST_CHECK(f() == 2);
|
BOOST_CHECK(f() == 2);
|
||||||
BOOST_CHECK(g() == 1);
|
BOOST_CHECK(g() == 1);
|
||||||
|
|
||||||
return 0;
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|||||||
21
test/quick.cpp
Normal file
21
test/quick.cpp
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
static int f( int x )
|
||||||
|
{
|
||||||
|
return x + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
boost::function<int(int)> fn( f );
|
||||||
|
|
||||||
|
BOOST_TEST_EQ( fn( 5 ), 6 );
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
||||||
27
test/return_function.cpp
Normal file
27
test/return_function.cpp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
// Copyright 2018 Peter Dimov.
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if defined(RETURN_FUNCTION_DYN_LINK)
|
||||||
|
# define EXPORT BOOST_SYMBOL_EXPORT
|
||||||
|
#else
|
||||||
|
# define EXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int f( int x, int y )
|
||||||
|
{
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT boost::function<int(int, int)> get_fn_1()
|
||||||
|
{
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT boost::function2<int, int, int> get_fn_2()
|
||||||
|
{
|
||||||
|
return f;
|
||||||
|
}
|
||||||
@@ -6,12 +6,13 @@
|
|||||||
|
|
||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/move/move.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
#define BOOST_CHECK BOOST_TEST
|
||||||
#include <boost/function.hpp>
|
|
||||||
#include <boost/move/move.hpp>
|
|
||||||
|
|
||||||
class only_movable {
|
class only_movable {
|
||||||
private:
|
private:
|
||||||
@@ -63,7 +64,7 @@ int three(std::string&&) { return 1; }
|
|||||||
std::string&& four(std::string&& s) { return boost::move(s); }
|
std::string&& four(std::string&& s) { return boost::move(s); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int test_main(int, char*[])
|
int main()
|
||||||
{
|
{
|
||||||
using boost::function;
|
using boost::function;
|
||||||
|
|
||||||
@@ -102,5 +103,5 @@ int test_main(int, char*[])
|
|||||||
BOOST_CHECK(f4(std::string("world")) == "world");
|
BOOST_CHECK(f4(std::string("world")) == "world");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|||||||
14
test/test_bad_function_call.cpp
Normal file
14
test/test_bad_function_call.cpp
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
// Copyright 2018 Peter Dimov.
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
void throw_bad_function_call();
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
BOOST_TEST_THROWS( throw_bad_function_call(), boost::bad_function_call );
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
||||||
48
test/test_mixed_cxxstd.cpp
Normal file
48
test/test_mixed_cxxstd.cpp
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
// Copyright 2018 Peter Dimov.
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
void call_fn_1( boost::function<void()> const & fn );
|
||||||
|
void call_fn_2( boost::function<void(int)> const & fn );
|
||||||
|
void call_fn_3( boost::function<void(int, int)> const & fn );
|
||||||
|
|
||||||
|
void call_fn_4( boost::function0<void> const & fn );
|
||||||
|
void call_fn_5( boost::function1<void, int> const & fn );
|
||||||
|
void call_fn_6( boost::function2<void, int, int> const & fn );
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
static int v;
|
||||||
|
|
||||||
|
void f0()
|
||||||
|
{
|
||||||
|
v = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void f1( int x )
|
||||||
|
{
|
||||||
|
v = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
void f2( int x, int y )
|
||||||
|
{
|
||||||
|
v = x + y;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
v = 0; call_fn_1( f0 ); BOOST_TEST_EQ( v, -1 );
|
||||||
|
v = 0; call_fn_2( f1 ); BOOST_TEST_EQ( v, 1 );
|
||||||
|
v = 0; call_fn_3( f2 ); BOOST_TEST_EQ( v, 3 );
|
||||||
|
|
||||||
|
v = 0; call_fn_4( f0 ); BOOST_TEST_EQ( v, -1 );
|
||||||
|
v = 0; call_fn_5( f1 ); BOOST_TEST_EQ( v, 1 );
|
||||||
|
v = 0; call_fn_6( f2 ); BOOST_TEST_EQ( v, 3 );
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
||||||
21
test/test_return_function.cpp
Normal file
21
test/test_return_function.cpp
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
// Copyright 2018 Peter Dimov.
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
boost::function<int(int, int)> get_fn_1();
|
||||||
|
boost::function2<int, int, int> get_fn_2();
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
BOOST_TEST_EQ( get_fn_1()( 1, 2 ), 3 );
|
||||||
|
BOOST_TEST_EQ( get_fn_2()( 1, 2 ), 3 );
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
||||||
17
test/throw_bad_function_call.cpp
Normal file
17
test/throw_bad_function_call.cpp
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
// Copyright 2018 Peter Dimov.
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if defined(THROW_BAD_FUNCTION_CALL_DYN_LINK)
|
||||||
|
# define EXPORT BOOST_SYMBOL_EXPORT
|
||||||
|
#else
|
||||||
|
# define EXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXPORT void throw_bad_function_call()
|
||||||
|
{
|
||||||
|
throw boost::bad_function_call();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user