Compare commits

...

42 Commits

Author SHA1 Message Date
b67941dd7d Merge branch 'feature/use_invoke_swap' of https://github.com/Lastique/tuple into feature/pr-25 2023-09-28 21:53:59 +03:00
7fa72d91b7 Use std::tmpnam instead of a hardcoded file name, to avoid -j problems 2023-09-28 21:49:27 +03:00
cd5cac8d76 Change 3.3f to 3.25f to avoid equality issues with inexact float literal constants 2023-09-28 21:37:14 +03:00
db3fd72bb5 Regenerate CMakeLists.txt 2023-09-28 21:35:51 +03:00
c59605060a Add CMake tests 2023-09-28 21:22:03 +03:00
50b5b6a2cb Update test/Jamfile; add test/quick.cpp 2023-09-28 21:13:10 +03:00
6fe092c269 Update ci.yml 2023-09-28 21:08:10 +03:00
5d0ec18a0c Switch to boost::core::invoke_swap.
boost::swap is deprecated and will be removed. Use boost::core::invoke_swap
as a replacement.
2023-09-02 20:58:41 +03:00
453e061434 Merge pull request #24 from fanquake/patch-1
refactor: use core/swap.hpp over utility/swap.hpp
2022-12-05 06:07:24 +08:00
dc9592de76 refactor: use core/swap.hpp over utility/swap.hpp
The later is deprecated.
2022-12-04 15:24:10 +00:00
5d1c899afb Merge pull request #23 from fanquake/use_core_ref
refactor: use boost/core/ref.hpp over boost/ref.hpp
2022-08-24 06:46:28 +08:00
827a59efc4 refactor: use boost/core/ref.hpp over boost/ref.hpp
The later is deprecated:

```cpp
// The header file at this path is deprecated;
// use boost/core/ref.hpp instead.

include <boost/core/ref.hpp>
```
2022-08-23 15:48:49 +01:00
500e4fa0a2 Merge pull request #21 from igaztanaga/patch-1
Small fix for those using -Wsign-conversion
2021-12-30 23:20:18 +08:00
ded3c1d5c1 Merge branch 'boostorg:develop' into patch-1 2021-12-30 15:02:46 +01:00
aa16ae3ff0 Merge pull request #20 from sdarwin/feature/gha_fix_1
Update GitHub Actions CI file
2021-11-16 19:25:04 +02:00
7c01e916a3 More fixes for -Wsign-conversion 2021-10-11 13:26:45 +02:00
819b3dd67b Small fix for those using -Wsign-conversion 2021-10-11 13:18:23 +02:00
0b8f586814 Update GitHub Actions CI file 2021-07-30 16:10:39 +00:00
ec4f3b23c2 Merge branch 'master' into develop 2021-06-10 01:38:57 +03:00
ab9a627688 Update CMakeLists.txt 2021-06-10 00:49:34 +03:00
5a80dcdbf3 Merge pull request #19 from sdarwin/githubactions
GitHub Actions config
2021-03-05 07:09:48 +08:00
ceb4528e46 Add GitHub Actions config [ci skip] 2021-03-04 15:07:23 +00:00
c8c44605ed Merge pull request #18 from eldiener/develop
[skip ci] Add "cxxstd" json field
2021-01-22 08:00:10 +08:00
d4316fb288 [skip ci] Add "cxxstd" json field. The "cxxstd" json field is being added to each Boost library's meta json information for libraries in order to specify the minumum C++ standard compilation level. The value of this field matches one of the values for 'cxxstd' in Boost.Build. The purpose of doing this is to provide information for the Boost website documentation for each library which will specify the minimum C++ standard compilation that an end-user must employ in order to use the particular library. This will aid end-users who want to know if they can successfully use a Boost library based on their C++ compiler's compilation level, without having to search the library's documentation to find this out. 2021-01-21 16:24:54 -05:00
a4dff52f67 Merge branch 'develop' 2020-05-26 09:31:40 +08:00
cf820922ac Merge pull request #15 from eldiener/develop
Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74
2020-04-09 21:38:47 +08:00
c4addf9795 Corrected previous fix. 2020-04-08 17:48:25 -04:00
87ff02bf79 Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers. 2020-03-30 13:31:11 -04:00
9fd6a5e2c6 Merge pull request #11 from awulkiew/patch-1
Use class keyword in std::tuple_size and std::tuple_element specializations
2020-01-23 22:37:20 +08:00
ddaa127cee Merge pull request #13 from Romain-Geissler-1A/fix-deprecated-copy-warning
Fix -Wdeprecated-copy warning with gcc 9.
2020-01-23 22:36:37 +08:00
19f7cfdcdb [CMake] Generate cmake target that other libraries can use
... to express their dependency on boost tuple and get
usage requiremments, such as the include directory
2020-01-06 16:36:37 +02:00
504a70bd04 Merge pull request #14 from Lastique/patch-1
Fix narrowing conversion in tuple_manipulator constructor
2019-09-16 08:03:52 +08:00
72f2e7535e Fix narrowing conversion in tuple_manipulator ctor
This fixes unnecessary, possibly wrapping conversion of the character argument of tuple manipulators on tuple_manipulator construction. This should silence MSVC warning C4244:

  tuple_io.hpp(142,71): warning C4244:  'argument': conversion from 'const CharType' to 'const char', possible loss of data

Related to https://github.com/boostorg/filesystem/issues/118.
2019-09-15 15:41:29 +03:00
1e0276741b Fix -Wdeprecated-copy warning with gcc 9. 2019-04-17 21:13:33 +00:00
0b724234ce Merge pull request #12 from Mike-Devel/min_cmake
[CMake] Generate cmake target that other libraries can use
2018-12-24 07:25:52 +08:00
292f3f9dc8 [CMake] Generate cmake target that other libraries can use
... to express their dependency on boost tuple and get
usage requiremments, such as the include directory
2018-12-23 22:01:55 +01:00
30794afc61 Use class keyword in std::tuple_size and std::tuple_element specializations
To avoid warnings 'X defined as a struct template but previously declared as a class template'.
2018-01-06 12:40:55 +01:00
b8e982cd6f Merge pull request #10 from Kojoley/suppress-clang-mismatched-tags-warning
Suppress mismatched tags warning
2018-01-06 06:11:11 +08:00
37ef42e2c3 Suppress mismatched tags warning 2018-01-05 16:09:49 +03:00
327c1c4fe0 Merge pull request #8 from boostorg/feature/structured-bindings
Make boost::tuple tuple-like to support structured bindings
2018-01-04 07:10:48 +08:00
16731d2689 Make boost::tuple tuple-like to support structured bindings 2018-01-03 19:26:11 +02:00
c51d8a9495 Switch tests to lightweight_test 2018-01-03 18:41:14 +02:00
18 changed files with 1061 additions and 72 deletions

609
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,609 @@
name: CI
on:
pull_request:
push:
branches:
- master
- develop
- feature/**
env:
UBSAN_OPTIONS: print_stacktrace=1
jobs:
posix:
strategy:
fail-fast: false
matrix:
include:
- toolset: gcc-4.8
cxxstd: "03,11"
os: ubuntu-latest
container: ubuntu:18.04
install: g++-4.8-multilib
address-model: 32,64
- toolset: gcc-5
cxxstd: "03,11,14,1z"
os: ubuntu-latest
container: ubuntu:18.04
install: g++-5-multilib
address-model: 32,64
- toolset: gcc-6
cxxstd: "03,11,14,1z"
os: ubuntu-latest
container: ubuntu:18.04
install: g++-6-multilib
address-model: 32,64
- toolset: gcc-7
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: g++-7-multilib
address-model: 32,64
- toolset: gcc-8
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-8-multilib
address-model: 32,64
- toolset: gcc-9
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-9-multilib
address-model: 32,64
- toolset: gcc-10
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-10-multilib
address-model: 32,64
- toolset: gcc-11
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: g++-11-multilib
address-model: 32,64
- toolset: gcc-12
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: g++-12-multilib
address-model: 32,64
- toolset: gcc-13
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-latest
container: ubuntu:23.04
install: g++-13-multilib
address-model: 32,64
- toolset: clang
compiler: clang++-3.9
cxxstd: "03,11,14"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-3.9
- toolset: clang
compiler: clang++-4.0
cxxstd: "03,11,14"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-4.0
- toolset: clang
compiler: clang++-5.0
cxxstd: "03,11,14,1z"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-5.0
- toolset: clang
compiler: clang++-6.0
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-6.0
- toolset: clang
compiler: clang++-7
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-7
- toolset: clang
compiler: clang++-8
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-8
- toolset: clang
compiler: clang++-9
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-9
- toolset: clang
compiler: clang++-10
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
- toolset: clang
compiler: clang++-11
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
- toolset: clang
compiler: clang++-12
cxxstd: "03,11,14,17,20"
os: ubuntu-20.04
- toolset: clang
compiler: clang++-13
cxxstd: "03,11,14,17,20"
os: ubuntu-22.04
install: clang-13
- toolset: clang
compiler: clang++-14
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: clang-14
- toolset: clang
compiler: clang++-15
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: clang-15
- toolset: clang
compiler: clang++-16
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-latest
container: ubuntu:23.04
install: clang-16
- toolset: clang
cxxstd: "03,11,14,17,2a"
os: macos-11
- toolset: clang
cxxstd: "03,11,14,17,20,2b"
os: macos-12
- toolset: clang
cxxstd: "03,11,14,17,20,2b"
os: macos-13
runs-on: ${{matrix.os}}
container: ${{matrix.container}}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v3
- name: Setup container environment
if: matrix.container
run: |
apt-get update
apt-get -y install sudo python3 git g++
- name: Install packages
if: matrix.install
run: |
sudo apt-get update
sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python3 tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
./bootstrap.sh
./b2 -d0 headers
- name: Create user-config.jam
if: matrix.compiler
run: |
echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam
- name: Run tests
run: |
cd ../boost-root
export ADDRMD=${{matrix.address-model}}
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} ${ADDRMD:+address-model=$ADDRMD} variant=debug,release
windows:
strategy:
fail-fast: false
matrix:
include:
- toolset: msvc-14.0
cxxstd: 14,latest
addrmd: 32,64
os: windows-2019
- toolset: msvc-14.2
cxxstd: "14,17,20,latest"
addrmd: 32,64
os: windows-2019
- toolset: msvc-14.3
cxxstd: "14,17,20,latest"
addrmd: 32,64
os: windows-2022
- toolset: clang-win
cxxstd: "14,17,latest"
addrmd: 32,64
os: windows-2022
- toolset: gcc
cxxstd: "03,11,14,17,2a"
addrmd: 64
os: windows-2019
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
cmd /c bootstrap
b2 -d0 headers
- name: Run tests
shell: cmd
run: |
cd ../boost-root
b2 -j3 libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} variant=debug,release embed-manifest-via=linker
posix-cmake-subdir:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-11
- os: macos-12
- os: macos-13
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Install packages
if: matrix.install
run: sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
- name: Use library with add_subdirectory
run: |
cd ../boost-root/libs/$LIBRARY/test/cmake_subdir_test
mkdir __build__ && cd __build__
cmake ..
cmake --build .
ctest --output-on-failure --no-tests=error
posix-cmake-install:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-11
- os: macos-12
- os: macos-13
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Install packages
if: matrix.install
run: sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
- name: Configure
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DCMAKE_INSTALL_PREFIX=~/.local ..
- name: Install
run: |
cd ../boost-root/__build__
cmake --build . --target install
- name: Use the installed library
run: |
cd ../boost-root/libs/$LIBRARY/test/cmake_install_test && mkdir __build__ && cd __build__
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
cmake --build .
ctest --output-on-failure --no-tests=error
posix-cmake-test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-11
- os: macos-12
- os: macos-13
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Install packages
if: matrix.install
run: sudo apt-get -y install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
- name: Configure
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DBUILD_TESTING=ON ..
- name: Build tests
run: |
cd ../boost-root/__build__
cmake --build . --target tests
- name: Run tests
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error
windows-cmake-subdir:
strategy:
fail-fast: false
matrix:
include:
- os: windows-2019
- os: windows-2022
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
- name: Use library with add_subdirectory (Debug)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test
mkdir __build__ && cd __build__
cmake ..
cmake --build . --config Debug
ctest --output-on-failure --no-tests=error -C Debug
- name: Use library with add_subdirectory (Release)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test/__build__
cmake --build . --config Release
ctest --output-on-failure --no-tests=error -C Release
windows-cmake-install:
strategy:
fail-fast: false
matrix:
include:
- os: windows-2019
- os: windows-2022
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
- name: Configure
shell: cmd
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix ..
- name: Install (Debug)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target install --config Debug
- name: Install (Release)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target install --config Release
- name: Use the installed library (Debug)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test && mkdir __build__ && cd __build__
cmake -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix ..
cmake --build . --config Debug
ctest --output-on-failure --no-tests=error -C Debug
- name: Use the installed library (Release)
shell: cmd
run: |
cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test/__build__
cmake --build . --config Release
ctest --output-on-failure --no-tests=error -C Release
windows-cmake-test:
strategy:
fail-fast: false
matrix:
include:
- os: windows-2019
- os: windows-2022
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v3
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
- name: Configure
shell: cmd
run: |
cd ../boost-root
mkdir __build__ && cd __build__
cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DBUILD_TESTING=ON ..
- name: Build tests (Debug)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target tests --config Debug
- name: Run tests (Debug)
shell: cmd
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error -C Debug
- name: Build tests (Release)
shell: cmd
run: |
cd ../boost-root/__build__
cmake --build . --target tests --config Release
- name: Run tests (Release)
shell: cmd
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error -C Release

27
CMakeLists.txt Normal file
View File

@ -0,0 +1,27 @@
# Generated by `boostdep --cmake tuple`
# Copyright 2020, 2021 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.20)
project(boost_tuple VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
add_library(boost_tuple INTERFACE)
add_library(Boost::tuple ALIAS boost_tuple)
target_include_directories(boost_tuple INTERFACE include)
target_link_libraries(boost_tuple
INTERFACE
Boost::config
Boost::core
Boost::static_assert
Boost::type_traits
)
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
add_subdirectory(test)
endif()

View File

@ -34,10 +34,12 @@
#include <utility> // needed for the assignment from pair to tuple
#include <cstddef> // for std::size_t
#include <boost/core/invoke_swap.hpp>
#include <boost/type_traits/cv_traits.hpp>
#include <boost/type_traits/function_traits.hpp>
#include <boost/utility/swap.hpp>
#include <boost/type_traits/integral_constant.hpp>
#include <boost/detail/workaround.hpp> // needed for BOOST_WORKAROUND
@ -92,7 +94,7 @@ namespace detail {
template<class T>
class generate_error;
template<int N>
template<std::size_t N>
struct drop_front {
template<class Tuple>
struct apply {
@ -126,21 +128,21 @@ struct drop_front<0> {
#ifndef BOOST_NO_CV_SPECIALIZATIONS
template<int N, class T>
template<std::size_t N, class T>
struct element
{
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
apply<T>::type::head_type type;
};
template<int N, class T>
template<std::size_t N, class T>
struct element<N, const T>
{
private:
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
apply<T>::type::head_type unqualified_type;
public:
#if BOOST_WORKAROUND(__BORLANDC__,<0x600)
#if BOOST_WORKAROUND(BOOST_BORLANDC,<0x600)
typedef const unqualified_type type;
#else
typedef BOOST_DEDUCED_TYPENAME boost::add_const<unqualified_type>::type type;
@ -150,14 +152,14 @@ public:
namespace detail {
template<int N, class T, bool IsConst>
template<std::size_t N, class T, bool IsConst>
struct element_impl
{
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
apply<T>::type::head_type type;
};
template<int N, class T>
template<std::size_t N, class T>
struct element_impl<N, T, true /* IsConst */>
{
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
@ -168,7 +170,7 @@ struct element_impl<N, T, true /* IsConst */>
} // end of namespace detail
template<int N, class T>
template<std::size_t N, class T>
struct element:
public detail::element_impl<N, T, ::boost::is_const<T>::value>
{
@ -209,7 +211,7 @@ template <class T> struct access_traits<T&> {
// get function for non-const cons-lists, returns a reference to the element
template<int N, class HT, class TT>
template<std::size_t N, class HT, class TT>
inline typename access_traits<
typename element<N, cons<HT, TT> >::type
>::non_const_type
@ -223,7 +225,7 @@ get(cons<HT, TT>& c) {
// get function for const cons-lists, returns a const reference to
// the element. If the element is a reference, returns the reference
// as such (that is, can return a non-const reference)
template<int N, class HT, class TT>
template<std::size_t N, class HT, class TT>
inline typename access_traits<
typename element<N, cons<HT, TT> >::type
>::const_type
@ -309,6 +311,7 @@ struct cons {
tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::cnull())
{}
cons( const cons& u ) : head(u.head), tail(u.tail) {}
template <class HT2, class TT2>
cons( const cons<HT2, TT2>& u ) : head(u.head), tail(u.tail) {}
@ -331,7 +334,7 @@ struct cons {
}
// get member functions (non-const and const)
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, cons<HT, TT> >::type
>::non_const_type
@ -339,7 +342,7 @@ struct cons {
return boost::tuples::get<N>(*this); // delegate to non-member get
}
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, cons<HT, TT> >::type
>::const_type
@ -388,6 +391,8 @@ struct cons<HT, null_type> {
const null_type&, const null_type&, const null_type&)
: head () {}
cons( const cons& u ) : head(u.head) {}
template <class HT2>
cons( const cons<HT2, null_type>& u ) : head(u.head) {}
@ -399,7 +404,7 @@ struct cons<HT, null_type> {
// is illformed if HT is a reference
cons& operator=(const cons& u) { head = u.head; return *this; }
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, self_type>::type
>::non_const_type
@ -407,7 +412,7 @@ struct cons<HT, null_type> {
return boost::tuples::get<N>(*this);
}
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, self_type>::type
>::const_type
@ -420,28 +425,28 @@ struct cons<HT, null_type> {
// templates for finding out the length of the tuple -------------------
template<class T>
struct length {
BOOST_STATIC_CONSTANT(int, value = 1 + length<typename T::tail_type>::value);
struct length: boost::integral_constant<std::size_t, 1 + length<typename T::tail_type>::value>
{
};
template<>
struct length<tuple<> > {
BOOST_STATIC_CONSTANT(int, value = 0);
struct length<tuple<> >: boost::integral_constant<std::size_t, 0>
{
};
template<>
struct length<tuple<> const> {
BOOST_STATIC_CONSTANT(int, value = 0);
struct length<tuple<> const>: boost::integral_constant<std::size_t, 0>
{
};
template<>
struct length<null_type> {
BOOST_STATIC_CONSTANT(int, value = 0);
struct length<null_type>: boost::integral_constant<std::size_t, 0>
{
};
template<>
struct length<null_type const> {
BOOST_STATIC_CONSTANT(int, value = 0);
struct length<null_type const>: boost::integral_constant<std::size_t, 0>
{
};
namespace detail {
@ -672,20 +677,20 @@ struct make_tuple_traits<T&> {
// All arrays are converted to const. This is because make_tuple takes its
// parameters as const T& and thus the knowledge of the potential
// non-constness of actual argument is lost.
template<class T, int n> struct make_tuple_traits <T[n]> {
template<class T, std::size_t n> struct make_tuple_traits <T[n]> {
typedef const T (&type)[n];
};
template<class T, int n>
template<class T, std::size_t n>
struct make_tuple_traits<const T[n]> {
typedef const T (&type)[n];
};
template<class T, int n> struct make_tuple_traits<volatile T[n]> {
template<class T, std::size_t n> struct make_tuple_traits<volatile T[n]> {
typedef const volatile T (&type)[n];
};
template<class T, int n>
template<class T, std::size_t n>
struct make_tuple_traits<const volatile T[n]> {
typedef const volatile T (&type)[n];
};
@ -959,11 +964,11 @@ void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
inline void swap(null_type&, null_type&) {}
template<class HH>
inline void swap(cons<HH, null_type>& lhs, cons<HH, null_type>& rhs) {
::boost::swap(lhs.head, rhs.head);
::boost::core::invoke_swap(lhs.head, rhs.head);
}
template<class HH, class TT>
inline void swap(cons<HH, TT>& lhs, cons<HH, TT>& rhs) {
::boost::swap(lhs.head, rhs.head);
::boost::core::invoke_swap(lhs.head, rhs.head);
::boost::tuples::swap(lhs.tail, rhs.tail);
}
template <class T0, class T1, class T2, class T3, class T4,

View File

@ -24,7 +24,7 @@ namespace boost { namespace python { class tuple; }}
#include <boost/static_assert.hpp>
// other compilers
#include <boost/ref.hpp>
#include <boost/core/ref.hpp>
#include <boost/tuple/detail/tuple_basic.hpp>
@ -63,5 +63,56 @@ get(const tuples::cons<HT, TT>& c) {
} // end namespace boost
#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
#include <tuple>
#include <cstddef>
namespace std
{
#if defined(BOOST_CLANG)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wmismatched-tags"
#endif
// std::tuple_size
template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10>
class tuple_size< boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >:
public boost::tuples::length< boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >
{
};
template<class H, class T> class tuple_size< boost::tuples::cons<H, T> >:
public boost::tuples::length< boost::tuples::cons<H, T> >
{
};
template<> class tuple_size< boost::tuples::null_type >:
public boost::tuples::length< boost::tuples::null_type >
{
};
// std::tuple_element
template<std::size_t I, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10>
class tuple_element< I, boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >:
public boost::tuples::element< I, boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >
{
};
template<std::size_t I, class H, class T> class tuple_element< I, boost::tuples::cons<H, T> >:
public boost::tuples::element< I, boost::tuples::cons<H, T> >
{
};
#if defined(BOOST_CLANG)
# pragma clang diagnostic pop
#endif
} // namespace std
#endif // !defined(BOOST_NO_CXX11_HDR_TUPLE)
#endif // BOOST_TUPLE_HPP

View File

@ -102,7 +102,7 @@ class tuple_manipulator {
CharType f_c;
public:
explicit tuple_manipulator(detail::format_info::manipulator_type m,
const char c = 0)
CharType c = CharType())
: mt(m), f_c(c) {}
template<class CharTrait>
@ -259,7 +259,7 @@ extract_and_check_delimiter(
#if defined (BOOST_NO_STD_LOCALE)
const bool is_delimiter = !isspace(d);
#elif defined ( __BORLANDC__ )
#elif defined ( BOOST_BORLANDC )
const bool is_delimiter = !std::use_facet< std::ctype< CharType > >
(is.getloc() ).is( std::ctype_base::space, d);
#else

View File

@ -13,5 +13,6 @@
],
"maintainers": [
"Jaakko Jarvi <jarvi -at- cs.tamu.edu>"
]
],
"cxxstd": "03"
}

11
test/CMakeLists.txt Normal file
View File

@ -0,0 +1,11 @@
# 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
include(BoostTestJamfile OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST)
if(HAVE_BOOST_TEST)
boost_test_jamfile(FILE Jamfile LINK_LIBRARIES Boost::tuple Boost::core)
endif()

View File

@ -1,8 +1,12 @@
# Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
# Distributed under the Boost Software License, Version 1.0.
project : requirements <library>/boost/test//boost_test_exec_monitor ;
import testing ;
test-suite tuple :
[ run tuple_test_bench.cpp ]
[ run io_test.cpp ]
[ run another_tuple_test_bench.cpp ]
;
run tuple_test_bench.cpp ;
run io_test.cpp ;
run another_tuple_test_bench.cpp ;
run std_tuple_size.cpp ;
run std_tuple_element.cpp ;
run structured_bindings.cpp ;
run quick.cpp ;

View File

@ -15,11 +15,10 @@
// Defining any of E1 to E5 or E7 to E11 opens some illegal code that
// should cause the compliation to fail.
#define BOOST_INCLUDE_MAIN // for testing, include rather than link
#include <boost/test/test_tools.hpp> // see "Header Implementation Option"
#include "boost/tuple/tuple.hpp"
#include "boost/core/lightweight_test.hpp"
#include <string>
#include <utility>
@ -149,7 +148,7 @@ void foo7() {
// --------------------------------
// ----------------------------
int test_main(int, char *[]) {
int main() {
foo1();
foo2();
@ -159,5 +158,5 @@ int test_main(int, char *[]) {
foo7();
return 0;
return boost::report_errors();
}

View File

@ -0,0 +1,17 @@
# 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...3.16)
project(cmake_install_test LANGUAGES CXX)
find_package(boost_tuple REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main Boost::tuple)
enable_testing()
add_test(main main)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@ -0,0 +1,18 @@
// Copyright 2017, 2021 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/tuple/tuple.hpp>
#include <cassert>
#define BOOST_TEST(expr) assert(expr)
#define BOOST_TEST_EQ(x1, x2) assert((x1)==(x2))
int main()
{
boost::tuple<int, int, int> tp( 1, 2, 3 );
BOOST_TEST_EQ( boost::get<0>(tp), 1 );
BOOST_TEST_EQ( boost::get<1>(tp), 2 );
BOOST_TEST_EQ( boost::get<2>(tp), 3 );
}

View File

@ -0,0 +1,40 @@
# 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...3.20)
project(cmake_subdir_test LANGUAGES CXX)
add_subdirectory(../.. boostorg/tuple)
set(deps
# Primary dependencies
config
core
static_assert
type_traits
# Secondary dependencies
assert
throw_exception
)
foreach(dep IN LISTS deps)
add_subdirectory(../../../${dep} boostorg/${dep})
endforeach()
# --target check
add_executable(quick ../quick.cpp)
target_link_libraries(quick Boost::tuple Boost::core)
enable_testing()
add_test(quick quick)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@ -10,17 +10,19 @@
//
// Testing the I/O facilities of tuples
#define BOOST_INCLUDE_MAIN // for testing, include rather than link
#include "boost/test/test_tools.hpp" // see "Header Implementation Option"
#define _CRT_SECURE_NO_WARNINGS // std::tmpnam
#include "boost/tuple/tuple_io.hpp"
#include "boost/tuple/tuple_comparison.hpp"
#include "boost/core/lightweight_test.hpp"
#include <fstream>
#include <iterator>
#include <algorithm>
#include <string>
#include <iomanip>
#include <cstdio>
#if defined BOOST_NO_STRINGSTREAM
#include <strstream>
@ -28,6 +30,8 @@
#include <sstream>
#endif
#define BOOST_CHECK BOOST_TEST
using namespace boost;
#if defined BOOST_NO_STRINGSTREAM
@ -38,9 +42,7 @@ typedef std::ostringstream useThisOStringStream;
typedef std::istringstream useThisIStringStream;
#endif
int test_main(int argc, char * argv[] ) {
(void)argc;
(void)argv;
int main() {
using boost::tuples::set_close;
using boost::tuples::set_open;
using boost::tuples::set_delimiter;
@ -84,7 +86,9 @@ int test_main(int argc, char * argv[] ) {
os4 << std::setw(10) << make_tuple(1, 2, 3);
BOOST_CHECK (os4.str() == std::string(" (1 2 3)") );
std::ofstream tmp("temp.tmp");
std::string fn = std::tmpnam( 0 );
std::ofstream tmp( fn.c_str() );
#if !defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
tmp << make_tuple("One", "Two", 3);
@ -95,7 +99,7 @@ int test_main(int argc, char * argv[] ) {
tmp.close();
// When teading tuples from a stream, manipulators must be set correctly:
std::ifstream tmp3("temp.tmp");
std::ifstream tmp3( fn.c_str() );
tuple<std::string, std::string, int> j;
#if !defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
@ -110,6 +114,7 @@ int test_main(int argc, char * argv[] ) {
tmp3.close();
std::remove( fn.c_str() );
// reading tuple<int, int, int> in format (a b c);
useThisIStringStream is1("(100 200 300)");
@ -138,6 +143,5 @@ int test_main(int argc, char * argv[] ) {
// general. If this is wanted, some kind of a parseable string class
// should be used.
return 0;
return boost::report_errors();
}

16
test/quick.cpp Normal file
View File

@ -0,0 +1,16 @@
// Copyright 2023 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/tuple/tuple.hpp>
#include <boost/core/lightweight_test.hpp>
int main()
{
boost::tuple<int, int, int> tp( 1, 2, 3 );
BOOST_TEST_EQ( boost::get<0>(tp), 1 );
BOOST_TEST_EQ( boost::get<1>(tp), 2 );
BOOST_TEST_EQ( boost::get<2>(tp), 3 );
return boost::report_errors();
}

View File

@ -0,0 +1,56 @@
// Copyright 2017 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/tuple/tuple.hpp>
#include <boost/core/lightweight_test_trait.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/config.hpp>
#include <boost/config/pragma_message.hpp>
#if defined(BOOST_NO_CXX11_HDR_TUPLE)
BOOST_PRAGMA_MESSAGE("Skipping std::tuple_element tests for lack of <tuple>")
int main() {}
#else
#include <tuple>
template<class Tp, std::size_t I, class E> void test()
{
BOOST_TEST_TRAIT_TRUE((boost::is_same<typename std::tuple_element<I, Tp>::type, E>));
typedef typename Tp::inherited Tp2;
BOOST_TEST_TRAIT_TRUE((boost::is_same<typename std::tuple_element<I, Tp2>::type, E>));
}
template<int> struct X
{
};
int main()
{
test<boost::tuple<X<0> const>, 0, X<0> const>();
test<boost::tuple<X<0> const, X<1> const>, 0, X<0> const>();
test<boost::tuple<X<0> const, X<1> const>, 1, X<1> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const>, 0, X<0> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const>, 1, X<1> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const>, 2, X<2> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const>, 0, X<0> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const>, 1, X<1> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const>, 2, X<2> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const>, 3, X<3> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const, X<4> const>, 0, X<0> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const, X<4> const>, 1, X<1> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const, X<4> const>, 2, X<2> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const, X<4> const>, 3, X<3> const>();
test<boost::tuple<X<0> const, X<1> const, X<2> const, X<3> const, X<4> const>, 4, X<4> const>();
return boost::report_errors();
}
#endif

61
test/std_tuple_size.cpp Normal file
View File

@ -0,0 +1,61 @@
// Copyright 2017 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/tuple/tuple.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/config.hpp>
#include <boost/config/pragma_message.hpp>
#if defined(BOOST_NO_CXX11_HDR_TUPLE)
BOOST_PRAGMA_MESSAGE("Skipping std::tuple_size tests for lack of <tuple>")
int main() {}
#else
#include <tuple>
template<class Tp> void test( std::size_t x )
{
BOOST_TEST_EQ( std::tuple_size< Tp >::value, x );
BOOST_TEST_EQ( std::tuple_size< typename Tp::inherited >::value, x );
}
struct V
{
};
int main()
{
test< boost::tuple<> >( 0 );
test< boost::tuple<V> >( 1 );
test< boost::tuple<V, V> >( 2 );
test< boost::tuple<V, V, V> >( 3 );
test< boost::tuple<V, V, V, V> >( 4 );
test< boost::tuple<V, V, V, V, V> >( 5 );
test< boost::tuple<V, V, V, V, V, V> >( 6 );
test< boost::tuple<V, V, V, V, V, V, V> >( 7 );
test< boost::tuple<V, V, V, V, V, V, V, V> >( 8 );
test< boost::tuple<V, V, V, V, V, V, V, V, V> >( 9 );
test< boost::tuple<V, V, V, V, V, V, V, V, V, V> >( 10 );
#if !defined(BOOST_NO_CXX11_DECLTYPE)
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple())>::value, 0 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1))>::value, 1 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2))>::value, 2 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3))>::value, 3 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3, 4))>::value, 4 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3, 4, 5))>::value, 5 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3, 4, 5, 6))>::value, 6 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3, 4, 5, 6, 7))>::value, 7 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3, 4, 5, 6, 7, 8))>::value, 8 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3, 4, 5, 6, 7, 8, 9))>::value, 9 );
BOOST_TEST_EQ( std::tuple_size<decltype(boost::make_tuple(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))>::value, 10 );
#endif
return boost::report_errors();
}
#endif

View File

@ -0,0 +1,77 @@
// Copyright 2017 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/tuple/tuple.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/config.hpp>
#include <boost/config/pragma_message.hpp>
#if defined(BOOST_NO_CXX17_STRUCTURED_BINDINGS)
BOOST_PRAGMA_MESSAGE("Skipping structured bindings test, not supported")
int main() {}
#else
int main()
{
// make_tuple
{
auto [x1] = boost::make_tuple( 1 );
BOOST_TEST_EQ( x1, 1 );
}
{
auto [x1, x2] = boost::make_tuple( 1, 2 );
BOOST_TEST_EQ( x1, 1 );
BOOST_TEST_EQ( x2, 2 );
}
{
auto [x1, x2, x3] = boost::make_tuple( 1, 2, 3 );
BOOST_TEST_EQ( x1, 1 );
BOOST_TEST_EQ( x2, 2 );
BOOST_TEST_EQ( x3, 3 );
}
{
auto [x1, x2, x3, x4] = boost::make_tuple( 1, 2, 3, 4 );
BOOST_TEST_EQ( x1, 1 );
BOOST_TEST_EQ( x2, 2 );
BOOST_TEST_EQ( x3, 3 );
BOOST_TEST_EQ( x4, 4 );
}
// tuple
{
auto [x1] = boost::tuple<int>( 1 );
BOOST_TEST_EQ( x1, 1 );
}
{
auto [x1, x2] = boost::tuple<int, int>( 1, 2 );
BOOST_TEST_EQ( x1, 1 );
BOOST_TEST_EQ( x2, 2 );
}
{
auto [x1, x2, x3] = boost::tuple<int, int, int>( 1, 2, 3 );
BOOST_TEST_EQ( x1, 1 );
BOOST_TEST_EQ( x2, 2 );
BOOST_TEST_EQ( x3, 3 );
}
{
auto [x1, x2, x3, x4] = boost::tuple<int, int, int, int>( 1, 2, 3, 4 );
BOOST_TEST_EQ( x1, 1 );
BOOST_TEST_EQ( x2, 2 );
BOOST_TEST_EQ( x3, 3 );
BOOST_TEST_EQ( x4, 4 );
}
return boost::report_errors();
}
#endif

View File

@ -8,19 +8,18 @@
// tuple_test_bench.cpp --------------------------------
#define BOOST_INCLUDE_MAIN // for testing, include rather than link
#include <boost/test/test_tools.hpp> // see "Header Implementation Option"
#include "boost/tuple/tuple.hpp"
#include "boost/tuple/tuple_comparison.hpp"
#include "boost/type_traits/is_const.hpp"
#include "boost/ref.hpp"
#include "boost/core/lightweight_test.hpp"
#include <string>
#include <utility>
#define BOOST_CHECK BOOST_TEST
using namespace boost;
// ----------------------------------------------------------------------------
@ -82,7 +81,7 @@ typedef tuple<std::string, std::pair<A, B> > t4;
typedef tuple<A*, tuple<const A*, const B&, C>, bool, void*> t5;
typedef tuple<volatile int, const volatile char&, int(&)(float) > t6;
# if !defined(__BORLANDC__) || __BORLAND__ > 0x0551
# if !defined(BOOST_BORLANDC) || BOOST_BORLANDC > 0x0551
typedef tuple<B(A::*)(C&), A&> t7;
#endif
@ -307,7 +306,7 @@ make_tuple_test()
// With function pointers, make_tuple works just fine
#if !defined(__BORLANDC__) || __BORLAND__ > 0x0551
#if !defined(BOOST_BORLANDC) || BOOST_BORLANDC > 0x0551
make_tuple(&make_tuple_test);
#endif
@ -422,9 +421,9 @@ void cons_test()
// ----------------------------------------------------------------------------
void const_tuple_test()
{
const tuple<int, float> t1(5, 3.3f);
const tuple<int, float> t1(5, 3.25f);
BOOST_CHECK(get<0>(t1) == 5);
BOOST_CHECK(get<1>(t1) == 3.3f);
BOOST_CHECK(get<1>(t1) == 3.25f);
}
// ----------------------------------------------------------------------------
@ -472,7 +471,7 @@ void tuple_swap_test()
// - main ---------------------------------------------------------------------
// ----------------------------------------------------------------------------
int test_main(int, char *[]) {
int main() {
construction_test();
element_access_test();
@ -486,12 +485,6 @@ int test_main(int, char *[]) {
const_tuple_test();
tuple_length_test();
tuple_swap_test();
return 0;
return boost::report_errors();
}