Compare commits

..

26 Commits

Author SHA1 Message Date
f6b538dbed Update .drone.jsonnet 2024-12-14 04:39:29 +02:00
69c3b8968a Apply Node20 workaround 2024-12-14 04:37:24 +02:00
7dd7abec65 Update ci.yml 2024-12-14 04:36:32 +02:00
89dfb032f2 Rename apply to apply_ to avoid msvc-14.3 conflict. Fixes #53. 2024-10-12 21:58:15 +03:00
ac731c96bb Add test for #53. Refs #53. 2024-10-12 21:32:25 +03:00
f3a164eaeb Update test/CMakeLists.txt 2024-10-07 22:36:22 +03:00
620c01266f Remove macos-12 from ci.yml, add macos-15 and ubuntu-24.04 2024-10-07 22:32:25 +03:00
e46566bc89 Update dependency list in cmake_subdir_test 2024-08-22 14:25:59 +03:00
bd668a0d9c Add VERBATIM to add_custom_target 2024-08-22 14:25:24 +03:00
bc78cd0f3d Update build.jam, test/Jamfile 2024-08-22 14:21:16 +03:00
27bbedd3a1 Merge branch 'modular' of https://github.com/grafikrobot/boostorg.function into feature/modular-b2 2024-08-22 14:17:05 +03:00
55567d8128 Regenerate CMakeLists.txt 2024-08-22 13:41:09 +03:00
7e4d90c87d Update .drone.jsonnet 2024-08-22 13:11:58 +03:00
b4ce38b1a0 Update ci.yml 2024-08-22 13:04:04 +03:00
e198ea3bc1 Update build deps. 2024-08-03 12:06:25 -05:00
0daa9f439e Move inter-lib dependencies to a project variable and into the build targets. 2024-07-23 22:34:22 -05:00
edd5bc27ed Update copyright dates. 2024-07-20 22:52:04 -05:00
b397ad461e Change all <source> references to <library>. 2024-07-20 19:38:32 -05:00
92b9a12c67 Bump B2 require to 5.2 2024-06-14 11:33:55 -05:00
98ae625d5b Sync from upstream. 2024-06-10 21:39:55 -05:00
c7ca5cc828 Add missing test deps. 2024-05-14 07:33:12 -05:00
d9647610ff Update dependencies. 2024-05-13 21:45:46 -05:00
96e26bb93e Sync from upstream. 2024-05-12 13:26:14 -05:00
b2fdb20690 Add requires-b2 check to top-level build file. 2024-05-05 09:00:01 -05:00
13407f5e3e Switch to library requirements instead of source. As source puts extra source in install targets. 2024-03-29 21:15:58 -05:00
7248975133 Make the library modular usable. 2024-03-11 08:38:17 -05:00
11 changed files with 146 additions and 69 deletions

View File

@ -32,6 +32,8 @@ local linux_pipeline(name, image, environment, packages = "", sources = [], arch
commands: commands:
[ [
'set -e', 'set -e',
'uname -a',
'echo $DRONE_STAGE_MACHINE',
'wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -', 'wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -',
] + ] +
(if sources != [] then [ ('apt-add-repository "' + source + '"') for source in sources ] else []) + (if sources != [] then [ ('apt-add-repository "' + source + '"') for source in sources ] else []) +
@ -150,16 +152,16 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
), ),
linux_pipeline( linux_pipeline(
"Linux 20.04 GCC 9* ARM64 ASAN", "Linux 20.04 GCC 9* ARM64 UBSAN",
"cppalliance/droneubuntu2004:multiarch", "cppalliance/droneubuntu2004:multiarch",
{ TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '11,14,17,2a' } + asan, { TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '11,14,17,2a' } + ubsan,
arch="arm64", arch="arm64",
), ),
linux_pipeline( linux_pipeline(
"Linux 20.04 GCC 9* ARM64 UBSAN", "Linux 20.04 GCC 9* ARM64 ASAN",
"cppalliance/droneubuntu2004:multiarch", "cppalliance/droneubuntu2004:multiarch",
{ TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '11,14,17,2a' } + ubsan, { TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '11,14,17,2a' } + asan,
arch="arm64", arch="arm64",
), ),
@ -191,23 +193,23 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
), ),
linux_pipeline( linux_pipeline(
"Linux 23.04 GCC 13 32/64 ASAN", "Linux 24.04 GCC 13 32/64",
"cppalliance/droneubuntu2304:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '11,14,17,20,2b', ADDRMD: '32,64' } + asan,
"g++-13-multilib",
),
linux_pipeline(
"Linux 23.04 GCC 13 32/64 UBSAN",
"cppalliance/droneubuntu2304:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '11,14,17,20,2b', ADDRMD: '32,64' } + ubsan,
"g++-13-multilib",
),
linux_pipeline(
"Linux 24.04 GCC 14 32/64",
"cppalliance/droneubuntu2404:1", "cppalliance/droneubuntu2404:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-14', CXXSTD: '11,14,17,20,2b', ADDRMD: '32,64' }, { TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '11,14,17,20,2b', ADDRMD: '32,64' },
"g++-13-multilib",
),
linux_pipeline(
"Linux 24.04 GCC 14 32/64 UBSAN",
"cppalliance/droneubuntu2404:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-14', CXXSTD: '11,14,17,20,2b', ADDRMD: '32,64' } + ubsan,
"g++-14-multilib",
),
linux_pipeline(
"Linux 24.04 GCC 14 32/64 ASAN",
"cppalliance/droneubuntu2404:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-14', CXXSTD: '11,14,17,20,2b', ADDRMD: '32,64' } + asan,
"g++-14-multilib", "g++-14-multilib",
), ),
@ -331,22 +333,22 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
), ),
linux_pipeline( linux_pipeline(
"Linux 23.04 Clang 16", "Linux 24.04 Clang 16",
"cppalliance/droneubuntu2304:1", "cppalliance/droneubuntu2404:1",
{ TOOLSET: 'clang', COMPILER: 'clang++-16', CXXSTD: '11,14,17,20,2b' }, { TOOLSET: 'clang', COMPILER: 'clang++-16', CXXSTD: '11,14,17,20,2b' },
"clang-16", "clang-16",
), ),
linux_pipeline( linux_pipeline(
"Linux 23.10 Clang 17 UBSAN", "Linux 24.04 Clang 17 UBSAN",
"cppalliance/droneubuntu2310:1", "cppalliance/droneubuntu2404:1",
{ TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '11,14,17,20,2b' } + ubsan, { TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '11,14,17,20,2b' } + ubsan,
"clang-17", "clang-17",
), ),
linux_pipeline( linux_pipeline(
"Linux 23.10 Clang 17 ASAN", "Linux 24.04 Clang 17 ASAN",
"cppalliance/droneubuntu2310:1", "cppalliance/droneubuntu2404:1",
{ TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '11,14,17,20,2b' } + asan, { TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '11,14,17,20,2b' } + asan,
"clang-17", "clang-17",
), ),
@ -365,6 +367,13 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
"clang-18", "clang-18",
), ),
linux_pipeline(
"Linux 24.10 Clang 19",
"cppalliance/droneubuntu2410:1",
{ TOOLSET: 'clang', COMPILER: 'clang++-19', CXXSTD: '11,14,17,20,2b' },
"clang-19",
),
macos_pipeline( macos_pipeline(
"MacOS 10.15 Xcode 12.2 UBSAN", "MacOS 10.15 Xcode 12.2 UBSAN",
{ TOOLSET: 'clang', COMPILER: 'clang++', CXXSTD: '11,14,17,2a' } + ubsan, { TOOLSET: 'clang', COMPILER: 'clang++', CXXSTD: '11,14,17,2a' } + ubsan,

View File

@ -18,7 +18,7 @@ jobs:
matrix: matrix:
include: include:
- toolset: gcc-4.7 - toolset: gcc-4.7
cxxstd: "0x" cxxstd: "11"
container: ubuntu:16.04 container: ubuntu:16.04
os: ubuntu-latest os: ubuntu-latest
install: g++-4.7-multilib install: g++-4.7-multilib
@ -79,7 +79,7 @@ jobs:
address-model: 32,64 address-model: 32,64
- toolset: gcc-13 - toolset: gcc-13
cxxstd: "11,14,17,20,2b" cxxstd: "11,14,17,20,2b"
container: ubuntu:23.04 container: ubuntu:24.04
os: ubuntu-latest os: ubuntu-latest
install: g++-13-multilib install: g++-13-multilib
address-model: 32,64 address-model: 32,64
@ -160,13 +160,13 @@ jobs:
- toolset: clang - toolset: clang
compiler: clang++-16 compiler: clang++-16
cxxstd: "11,14,17,20,2b" cxxstd: "11,14,17,20,2b"
container: ubuntu:23.04 container: ubuntu:24.04
os: ubuntu-latest os: ubuntu-latest
install: clang-16 install: clang-16
- toolset: clang - toolset: clang
compiler: clang++-17 compiler: clang++-17
cxxstd: "11,14,17,20,2b" cxxstd: "11,14,17,20,2b"
container: ubuntu:23.10 container: ubuntu:24.04
os: ubuntu-latest os: ubuntu-latest
install: clang-17 install: clang-17
- toolset: clang - toolset: clang
@ -176,33 +176,48 @@ jobs:
os: ubuntu-latest os: ubuntu-latest
install: clang-18 install: clang-18
- toolset: clang - toolset: clang
cxxstd: "11,14,17,2a" compiler: clang++-19
os: macos-11
- toolset: clang
cxxstd: "11,14,17,20,2b" cxxstd: "11,14,17,20,2b"
os: macos-12 container: ubuntu:24.10
os: ubuntu-latest
install: clang-19
- toolset: clang - toolset: clang
cxxstd: "11,14,17,20,2b" cxxstd: "11,14,17,20,2b"
os: macos-13 os: macos-13
- toolset: clang - toolset: clang
cxxstd: "11,14,17,20,2b" cxxstd: "11,14,17,20,2b"
os: macos-14 os: macos-14
- toolset: clang
cxxstd: "11,14,17,20,2b"
os: macos-15
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
container: ${{matrix.container}}
container:
image: ${{matrix.container}}
volumes:
- /node20217:/node20217:rw,rshared
- ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }}
defaults: defaults:
run: run:
shell: bash shell: bash
steps: steps:
- uses: actions/checkout@v3
- name: Setup container environment - name: Setup container environment
if: matrix.container if: matrix.container
run: | run: |
apt-get update apt-get update
apt-get -y install sudo python3 git g++ apt-get -y install sudo python3 git g++ curl xz-utils
- name: Install nodejs20glibc2.17
if: ${{ startsWith( matrix.container, 'ubuntu:1' ) }}
run: |
curl -LO https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz
tar -xf node-v20.9.0-linux-x64-glibc-217.tar.xz --strip-components 1 -C /node20217
ldd /__e/node20/bin/node
- uses: actions/checkout@v4
- name: Install packages - name: Install packages
if: matrix.install if: matrix.install
@ -272,7 +287,7 @@ jobs:
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup Boost - name: Setup Boost
shell: cmd shell: cmd
@ -309,14 +324,15 @@ jobs:
include: include:
- os: ubuntu-20.04 - os: ubuntu-20.04
- os: ubuntu-22.04 - os: ubuntu-22.04
- os: macos-11 - os: ubuntu-24.04
- os: macos-12
- os: macos-13 - os: macos-13
- os: macos-14
- os: macos-15
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install packages - name: Install packages
if: matrix.install if: matrix.install
@ -357,14 +373,15 @@ jobs:
include: include:
- os: ubuntu-20.04 - os: ubuntu-20.04
- os: ubuntu-22.04 - os: ubuntu-22.04
- os: macos-11 - os: ubuntu-24.04
- os: macos-12
- os: macos-13 - os: macos-13
- os: macos-14
- os: macos-15
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install packages - name: Install packages
if: matrix.install if: matrix.install
@ -415,14 +432,15 @@ jobs:
include: include:
- os: ubuntu-20.04 - os: ubuntu-20.04
- os: ubuntu-22.04 - os: ubuntu-22.04
- os: macos-11 - os: ubuntu-24.04
- os: macos-12
- os: macos-13 - os: macos-13
- os: macos-14
- os: macos-15
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install packages - name: Install packages
if: matrix.install if: matrix.install
@ -475,7 +493,7 @@ jobs:
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup Boost - name: Setup Boost
shell: cmd shell: cmd
@ -524,7 +542,7 @@ jobs:
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup Boost - name: Setup Boost
shell: cmd shell: cmd
@ -591,7 +609,7 @@ jobs:
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup Boost - name: Setup Boost
shell: cmd shell: cmd

View File

@ -19,7 +19,6 @@ target_link_libraries(boost_function
Boost::config Boost::config
Boost::core Boost::core
Boost::throw_exception Boost::throw_exception
Boost::type_traits
) )
target_compile_features(boost_function INTERFACE cxx_std_11) target_compile_features(boost_function INTERFACE cxx_std_11)

24
build.jam Normal file
View File

@ -0,0 +1,24 @@
# Copyright 2023-2024 René Ferdinand Rivera Morell
# Copyright 2024 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
require-b2 5.2 ;
constant boost_dependencies :
/boost/assert//boost_assert
/boost/bind//boost_bind
/boost/config//boost_config
/boost/core//boost_core
/boost/throw_exception//boost_throw_exception
;
project /boost/function ;
explicit
[ alias boost_function : : : : <include>include <library>$(boost_dependencies) ]
[ alias all : boost_function example test ]
;
call-if : boost-library function
;

View File

@ -6,9 +6,13 @@
# See accompanying file LICENSE_1_0.txt or copy at # 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
import ../../config/checks/config : requires ; require-b2 5.0.1 ;
import-search /boost/config/checks ;
import config : requires ;
import testing ; import testing ;
project : requirements <library>/boost/function//boost_function ;
run bind1st.cpp : : : [ requires cxx98_binders ] ; run bind1st.cpp : : : [ requires cxx98_binders ] ;
run int_div.cpp ; run int_div.cpp ;
run sum_avg.cpp ; run sum_avg.cpp ;

View File

@ -261,9 +261,9 @@ namespace boost {
actual invoker that will be used for the given function actual invoker that will be used for the given function
object. object.
Each specialization contains an "apply" nested class template Each specialization contains an "apply_" nested class template
that accepts the function object, return type, function that accepts the function object, return type, function
argument types, and allocator. The resulting "apply" class argument types, and allocator. The resulting "apply_" class
contains two typedefs, "invoker_type" and "manager_type", contains two typedefs, "invoker_type" and "manager_type",
which correspond to the invoker and manager types. */ which correspond to the invoker and manager types. */
template<typename Tag> template<typename Tag>
@ -275,7 +275,7 @@ namespace boost {
{ {
template<typename FunctionPtr, template<typename FunctionPtr,
typename R, typename... T> typename R, typename... T>
struct apply struct apply_
{ {
typedef typename get_function_invoker< typedef typename get_function_invoker<
FunctionPtr, FunctionPtr,
@ -308,7 +308,7 @@ namespace boost {
{ {
template<typename MemberPtr, template<typename MemberPtr,
typename R, typename... T> typename R, typename... T>
struct apply struct apply_
{ {
typedef typename get_member_invoker< typedef typename get_member_invoker<
MemberPtr, MemberPtr,
@ -341,7 +341,7 @@ namespace boost {
{ {
template<typename FunctionObj, template<typename FunctionObj,
typename R, typename... T> typename R, typename... T>
struct apply struct apply_
{ {
typedef typename get_function_obj_invoker< typedef typename get_function_obj_invoker<
FunctionObj, FunctionObj,
@ -374,7 +374,7 @@ namespace boost {
{ {
template<typename RefWrapper, template<typename RefWrapper,
typename R, typename... T> typename R, typename... T>
struct apply struct apply_
{ {
typedef typename get_function_ref_invoker< typedef typename get_function_ref_invoker<
typename RefWrapper::type, typename RefWrapper::type,
@ -923,7 +923,7 @@ 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::get_invoker<tag> get_invoker; typedef boost::detail::function::get_invoker<tag> get_invoker;
typedef typename get_invoker:: typedef typename get_invoker::
template apply<Functor, R, template apply_<Functor, R,
T...> T...>
handler_type; handler_type;

View File

@ -6,6 +6,6 @@ include(BoostTestJamfile OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST)
if(HAVE_BOOST_TEST) if(HAVE_BOOST_TEST)
boost_test_jamfile(FILE Jamfile.v2 LINK_LIBRARIES Boost::function Boost::core Boost::lambda) boost_test_jamfile(FILE Jamfile.v2 LINK_LIBRARIES Boost::function Boost::core Boost::lambda Boost::move)
endif() endif()

View File

@ -16,6 +16,8 @@ project
<toolset>msvc:<warnings-as-errors>on <toolset>msvc:<warnings-as-errors>on
<toolset>gcc:<warnings-as-errors>on <toolset>gcc:<warnings-as-errors>on
<toolset>clang:<warnings-as-errors>on <toolset>clang:<warnings-as-errors>on
<library>/boost/function//boost_function
<library>/boost/typeof//boost_typeof
; ;
run function_test.cpp ; run function_test.cpp ;
@ -24,7 +26,8 @@ run function_test.cpp : : : <rtti>off <toolset>gcc-4.4,<cxxstd>0x:<build>no : fu
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 ;
run lambda_test.cpp ; run lambda_test.cpp
: : : <library>/boost/lambda//boost_lambda ;
compile-fail function_test_fail1.cpp ; compile-fail function_test_fail1.cpp ;
compile-fail function_test_fail2.cpp ; compile-fail function_test_fail2.cpp ;
compile function_30.cpp ; compile function_30.cpp ;
@ -42,9 +45,10 @@ run function_ref_portable.cpp ;
run contains_test.cpp ; run contains_test.cpp ;
run contains2_test.cpp ; run contains2_test.cpp ;
run nothrow_swap.cpp ; run nothrow_swap.cpp ;
run rvalues_test.cpp ; run rvalues_test.cpp
: : : <library>/boost/move//boost_move ;
compile function_typeof_test.cpp compile function_typeof_test.cpp
: <cxxstd>03:<build>no <cxxstd>98:<build>no <cxxstd>0x:<build>no ; : <cxxstd>03:<build>no <cxxstd>98:<build>no <cxxstd>0x:<build>no ;
run result_arg_types_test.cpp ; run result_arg_types_test.cpp ;
run result_arg_n_types_test.cpp ; run result_arg_n_types_test.cpp ;
@ -89,3 +93,5 @@ run contains2_test.cpp : : : <rtti>off <toolset>gcc-4.4,<cxxstd>0x:<build>no : c
run contains3_test.cpp ; run contains3_test.cpp ;
run contains3_test.cpp : : : <rtti>off <toolset>gcc-4.4,<cxxstd>0x:<build>no : contains3_test_no_rtti ; run contains3_test.cpp : : : <rtti>off <toolset>gcc-4.4,<cxxstd>0x:<build>no : contains3_test_no_rtti ;
compile issue_53.cpp ;

View File

@ -14,4 +14,4 @@ target_link_libraries(main Boost::function)
enable_testing() enable_testing()
add_test(main main) add_test(main main)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>) add_custom_target(check VERBATIM COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@ -16,10 +16,7 @@ assert
bind bind
config config
core core
preprocessor
throw_exception throw_exception
type_traits
typeof
# Secondary dependencies # Secondary dependencies
@ -40,4 +37,4 @@ target_link_libraries(quick Boost::function Boost::core)
enable_testing() enable_testing()
add_test(quick quick) add_test(quick quick)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>) add_custom_target(check VERBATIM COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

20
test/issue_53.cpp Normal file
View File

@ -0,0 +1,20 @@
// Copyright 2024 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
//
// https://github.com/boostorg/function/issues/53
#include <boost/bind/apply.hpp>
#include <boost/bind/bind.hpp>
#include <boost/function.hpp>
int TestArg( int, double )
{
return 0;
}
void f()
{
boost::function<int(int)> fn = boost::bind( &TestArg, boost::placeholders::_1, 1.0 );
}