mirror of
https://github.com/boostorg/conversion.git
synced 2026-08-09 23:11:18 +02:00
Compare commits
56
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
827dd94c68 | ||
|
|
782e083f61 | ||
|
|
1e6424563d | ||
|
|
6632ca9309 | ||
|
|
b74a4c34cb | ||
|
|
452adac97f | ||
|
|
5f82d5aa7d | ||
|
|
9d64c899df | ||
|
|
35a71f0701 | ||
|
|
8a860e05d0 | ||
|
|
9f285ef0c4 | ||
|
|
5f36c2c710 | ||
|
|
41e62ed851 | ||
|
|
5cf5f78376 | ||
|
|
5a3587c988 | ||
|
|
f7f3c9b5ce | ||
|
|
668030fcd6 | ||
|
|
0d60a3f7ce | ||
|
|
0ff5adc258 | ||
|
|
2598281d10 | ||
|
|
a1104f580c | ||
|
|
9a03296816 | ||
|
|
7ba0984b34 | ||
|
|
4ae8b4d495 | ||
|
|
71b6a864a4 | ||
|
|
b2a49138cf | ||
|
|
00f06d3549 | ||
|
|
968dfd47f1 | ||
|
|
f0fe02f7d6 | ||
|
|
19b5a1cf29 | ||
|
|
1a2e4fd8ef | ||
|
|
8d1721f312 | ||
|
|
c6ab56e983 | ||
|
|
1c62347706 | ||
|
|
56becb8fee | ||
|
|
67ae26b0f0 | ||
|
|
d4e593120d | ||
|
|
76ed70b0b1 | ||
|
|
4b7d551907 | ||
|
|
9e3216d22f | ||
|
|
4e557d31d1 | ||
|
|
46695ffb86 | ||
|
|
c1c098fac1 | ||
|
|
b171fe1ff6 | ||
|
|
a178d1a691 | ||
|
|
5176e189b8 | ||
|
|
49e6421271 | ||
|
|
a0bfc39077 | ||
|
|
2bf2bba4be | ||
|
|
f882ab890d | ||
|
|
e0bb75e096 | ||
|
|
80b9240f2e | ||
|
|
df86cb59c4 | ||
|
|
4fec53f3db | ||
|
|
db398fc1c8 | ||
|
|
1576ff7be6 |
@@ -0,0 +1,11 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
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-14 # Do not remove! It is the only toolset that tests CMake tests down below
|
||||||
|
cxxstd: "03,11,14,17,20"
|
||||||
|
os: ubuntu-24.04
|
||||||
|
- toolset: gcc-12
|
||||||
|
cxxstd: "03,11,14,17,2a"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
cxxflags: "cxxflags=--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined"
|
||||||
|
linkflags: "linkflags=--coverage -lasan -lubsan"
|
||||||
|
gcov_tool: "gcov-12"
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-14
|
||||||
|
cxxstd: "03,11,14,17,2a"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
|
||||||
|
runs-on: ${{matrix.os}}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
if: matrix.install
|
||||||
|
run: sudo apt 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 10 https://github.com/boostorg/boost.git boost-root
|
||||||
|
cd boost-root
|
||||||
|
git submodule update --init --depth 10 --jobs 2 tools/boostdep tools/inspect libs/filesystem
|
||||||
|
python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 3" filesystem
|
||||||
|
rm -rf libs/$LIBRARY/*
|
||||||
|
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
|
||||||
|
python tools/boostdep/depinst/depinst.py --include benchmark --include example --include examples --include tools --git_args "--depth 10 --jobs 3" $LIBRARY
|
||||||
|
./bootstrap.sh
|
||||||
|
./b2 -j4 variant=debug tools/inspect
|
||||||
|
|
||||||
|
- name: Run CMake tests
|
||||||
|
if: ${{matrix.toolset == 'gcc-14'}}
|
||||||
|
run: |
|
||||||
|
cd ../boost-root/
|
||||||
|
mkdir __build
|
||||||
|
cd __build
|
||||||
|
cmake -DBUILD_TESTING=1 -DBOOST_INCLUDE_LIBRARIES=conversion -DCMAKE_CXX_COMPILER=g++-14 -DCMAKE_C_COMPILER=gcc-14 ..
|
||||||
|
cmake --build . --target tests
|
||||||
|
ctest --output-on-failure --no-tests=error
|
||||||
|
cd ..
|
||||||
|
rm -rf __build
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: |
|
||||||
|
cd ../boost-root
|
||||||
|
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} variant=debug,release "${{matrix.cxxflags}}" "${{matrix.linkflags}}" "${{matrix.launcher}}"
|
||||||
|
dist/bin/inspect libs/$LIBRARY
|
||||||
|
|
||||||
|
- name: Prepare coverage data
|
||||||
|
if: matrix.gcov_tool
|
||||||
|
run: |
|
||||||
|
mkdir -p $GITHUB_WORKSPACE/coveralls
|
||||||
|
|
||||||
|
echo -e "#!/bin/bash\nexec ${{matrix.gcov_tool}} \"\$@\"" > $GITHUB_WORKSPACE/coveralls/gcov_wrapper.sh
|
||||||
|
chmod +x $GITHUB_WORKSPACE/coveralls/gcov_wrapper.sh
|
||||||
|
wget https://github.com/linux-test-project/lcov/archive/v1.16.zip
|
||||||
|
unzip v1.16.zip
|
||||||
|
LCOV="`pwd`/lcov-1.16/bin/lcov --gcov-tool $GITHUB_WORKSPACE/coveralls/gcov_wrapper.sh"
|
||||||
|
|
||||||
|
echo "$LCOV --directory ../boost-root/bin.v2/libs/$LIBRARY/ --base-directory `pwd`/libs/$LIBRARY/test --capture --output-file $GITHUB_WORKSPACE/coveralls/coverage.info"
|
||||||
|
$LCOV --directory ../boost-root/bin.v2/libs/$LIBRARY/ --base-directory ../boost-root/ --capture --output-file $GITHUB_WORKSPACE/coveralls/coverage.info
|
||||||
|
$LCOV --remove $GITHUB_WORKSPACE/coveralls/coverage.info "/usr*" "*/$LIBRARY/test/*" ${{matrix.ignore_coverage}} "*/$LIBRARY/tests/*" "*/$LIBRARY/examples/*" "*/$LIBRARY/example/*" -o $GITHUB_WORKSPACE/coveralls/coverage.info
|
||||||
|
|
||||||
|
cd ../boost-root
|
||||||
|
OTHER_LIBS=`grep "submodule .*" .gitmodules | sed 's/\[submodule\ "\(.*\)"\]/"\*\/boost\/\1\.hpp" "\*\/boost\/\1\/\*"/g'| sed "/\"\*\/boost\/$LIBRARY\/\*\"/d" | sed ':a;N;$!ba;s/\n/ /g'`
|
||||||
|
echo $OTHER_LIBS
|
||||||
|
eval "$LCOV --remove $GITHUB_WORKSPACE/coveralls/coverage.info $OTHER_LIBS -o $GITHUB_WORKSPACE/coveralls/coverage.info"
|
||||||
|
|
||||||
|
- name: Coveralls
|
||||||
|
uses: coverallsapp/github-action@master
|
||||||
|
if: matrix.gcov_tool
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
path-to-lcov: ./coveralls/coverage.info
|
||||||
|
parallel: true
|
||||||
|
|
||||||
|
windows:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- toolset: msvc-14.3
|
||||||
|
cxxstd: "14,17,latest"
|
||||||
|
addrmd: 32,64
|
||||||
|
os: windows-2025
|
||||||
|
- toolset: gcc
|
||||||
|
cxxstd: "03,11,14,17,2a"
|
||||||
|
addrmd: 64
|
||||||
|
os: windows-2025
|
||||||
|
|
||||||
|
runs-on: ${{matrix.os}}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- 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 10 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 --include benchmark --include example --include examples --include tools --git_args "--jobs 3" %LIBRARY%
|
||||||
|
cmd /c bootstrap
|
||||||
|
|
||||||
|
- name: Run CMake tests
|
||||||
|
if: ${{matrix.toolset == 'msvc-14.3'}}
|
||||||
|
shell: cmd
|
||||||
|
run: |
|
||||||
|
choco install --no-progress ninja
|
||||||
|
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsall.bat" x64
|
||||||
|
cd ../boost-root/
|
||||||
|
mkdir __build
|
||||||
|
cd __build
|
||||||
|
cmake -DBUILD_TESTING=1 -DBOOST_INCLUDE_LIBRARIES=conversion ..
|
||||||
|
cmake --build . --target tests --config Debug
|
||||||
|
ctest --output-on-failure --no-tests=error -C Debug
|
||||||
|
cd ..
|
||||||
|
rm -rf __build
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
||||||
|
finish:
|
||||||
|
needs: posix
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Coveralls Finished
|
||||||
|
uses: coverallsapp/github-action@master
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.github_token }}
|
||||||
|
parallel-finished: true
|
||||||
-148
@@ -1,148 +0,0 @@
|
|||||||
# 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)
|
|
||||||
#
|
|
||||||
# Copyright Antony Polukhin 2014-2020.
|
|
||||||
|
|
||||||
#
|
|
||||||
# See https://svn.boost.org/trac/boost/wiki/TravisCoverals for description of this file
|
|
||||||
# and how it can be used with Boost libraries.
|
|
||||||
#
|
|
||||||
# File revision #10
|
|
||||||
|
|
||||||
language: cpp
|
|
||||||
os: linux
|
|
||||||
|
|
||||||
# `--coverage` flags required to generate coverage info for Coveralls
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- env: B2_ARGS='cxxstd=98,03,11,14,1z toolset=gcc-8 cxxflags="--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD" linkflags="--coverage -lasan -lubsan"'
|
|
||||||
name: "GCC-8"
|
|
||||||
sudo: required # Required by leak sanitizer
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: ubuntu-toolchain-r-test
|
|
||||||
packages: g++-8
|
|
||||||
|
|
||||||
- env: B2_ARGS='cxxstd=98,0x toolset=gcc-4.6 cxxflags="--coverage -DBOOST_TRAVISCI_BUILD" linkflags="--coverage"'
|
|
||||||
name: "GCC-4.6"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: ubuntu-toolchain-r-test
|
|
||||||
packages: g++-4.6
|
|
||||||
|
|
||||||
# - env: B2_ARGS='cxxstd=98,03,11,14,1y toolset=gcc-8 cxxflags="--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD -fno-exceptions" linkflags="--coverage -lasan -lubsan"'
|
|
||||||
# name: "GCC-8, no exceptions"
|
|
||||||
# sudo: required # Required by leak sanitizer
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# sources: ubuntu-toolchain-r-test
|
|
||||||
# packages: g++-8
|
|
||||||
|
|
||||||
- env: B2_ARGS='cxxstd=98,03,11,14,1z toolset=clang-7 cxxflags="--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD" linkflags="--coverage -fsanitize=address,leak,undefined"'
|
|
||||||
name: "Clang-7"
|
|
||||||
sudo: required # Required by leak sanitizer
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: llvm-toolchain-trusty-7
|
|
||||||
packages: clang++-7
|
|
||||||
|
|
||||||
- env: B2_ARGS='cxxstd=03,11,14 toolset=clang-libc++ cxxflags="--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD" linkflags="--coverage -fsanitize=address,leak,undefined"'
|
|
||||||
name: "Clang-3.8, libc++"
|
|
||||||
sudo: required # Required by leak sanitizer
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages: libc++-dev
|
|
||||||
|
|
||||||
###############################################################################################################
|
|
||||||
# From this point and below code is same for all the Boost libs
|
|
||||||
###############################################################################################################
|
|
||||||
|
|
||||||
# Installing additional tools
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: git-core
|
|
||||||
packages:
|
|
||||||
- git
|
|
||||||
- python-yaml
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
# Autodetect Boost branch by using the following code: - BOOST_BRANCH=$TRAVIS_BRANCH
|
|
||||||
# or just directly specify it
|
|
||||||
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
|
|
||||||
|
|
||||||
# Files, which coverage results must be ignored (files from other projects).
|
|
||||||
# Example: - IGNORE_COVERAGE='*/boost/progress.hpp */filesystem/src/*'
|
|
||||||
- IGNORE_COVERAGE=''
|
|
||||||
|
|
||||||
# boost-local/libs/ folder to put this library into. This may be useful, if you're for example running Travis
|
|
||||||
# from `Boost.DLL` repo while Boost already has `dll` and with to replace `dll` with content of`Boost.DLL`.
|
|
||||||
#
|
|
||||||
# Otherwise just leave the default value - BOOST_LIBS_FOLDER=$(basename $TRAVIS_BUILD_DIR)
|
|
||||||
- BOOST_LIBS_FOLDER=$(basename $TRAVIS_BUILD_DIR)
|
|
||||||
|
|
||||||
# Global options for sanitizers
|
|
||||||
- UBSAN_OPTIONS=print_stacktrace=1
|
|
||||||
- LSAN_OPTIONS=verbosity=1:log_threads=1
|
|
||||||
# Cloning minimal set of Boost libraries
|
|
||||||
- BOOST=$HOME/boost-local
|
|
||||||
- git clone -b $BOOST_BRANCH --depth 10 https://github.com/boostorg/boost.git $BOOST
|
|
||||||
- cd $BOOST
|
|
||||||
- git submodule update --init --depth 10 --jobs 2 tools/build tools/boostdep tools/inspect libs/filesystem
|
|
||||||
- python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 2" $BOOST/libs/filesystem
|
|
||||||
|
|
||||||
# Replacing Boost module with this project and installing Boost dependencies
|
|
||||||
- echo "Testing $BOOST/libs/$BOOST_LIBS_FOLDER moved from $TRAVIS_BUILD_DIR, branch $BOOST_BRANCH"
|
|
||||||
- rm -rf $BOOST/libs/$BOOST_LIBS_FOLDER || true
|
|
||||||
- mv $TRAVIS_BUILD_DIR $BOOST/libs/$BOOST_LIBS_FOLDER
|
|
||||||
- python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 2" $BOOST_LIBS_FOLDER
|
|
||||||
- git status
|
|
||||||
|
|
||||||
# Adding missing toolsets and preparing Boost headers
|
|
||||||
- ./bootstrap.sh
|
|
||||||
- ./b2 headers
|
|
||||||
- ./b2 -j4 variant=debug tools/inspect/build
|
|
||||||
- |-
|
|
||||||
echo "using gcc ;" >> ~/user-config.jam
|
|
||||||
echo "using clang ;" >> ~/user-config.jam
|
|
||||||
echo "using clang : 3.8 : clang++-3.8 ;" >> ~/user-config.jam
|
|
||||||
echo "using clang : 4 : clang++-4.0 ;" >> ~/user-config.jam
|
|
||||||
echo "using clang : 5 : clang++-5.0 ;" >> ~/user-config.jam
|
|
||||||
echo "using clang : 6 : clang++-6.0 ;" >> ~/user-config.jam
|
|
||||||
echo "using clang : 7 : clang++-7 ;" >> ~/user-config.jam
|
|
||||||
echo "using clang : 8 : clang++-8 ;" >> ~/user-config.jam
|
|
||||||
echo "using clang : libc++ : clang++-libc++ ;" >> ~/user-config.jam
|
|
||||||
- cd $BOOST/libs/$BOOST_LIBS_FOLDER/test/
|
|
||||||
|
|
||||||
script:
|
|
||||||
- sh -c "../../../b2 -j2 $B2_ARGS"
|
|
||||||
- ../../../dist/bin/inspect .. -license -copyright -crlf -end -path_name -tab -ascii -apple_macro -assert_macro -deprecated_macro -minmax -unnamed
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
# Copying Coveralls data to a separate folder
|
|
||||||
- mkdir -p $TRAVIS_BUILD_DIR/coverals
|
|
||||||
- find ../../../bin.v2/ -name "*.gcda" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \;
|
|
||||||
- find ../../../bin.v2/ -name "*.gcno" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \;
|
|
||||||
- find ../../../bin.v2/ -name "*.da" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \;
|
|
||||||
- find ../../../bin.v2/ -name "*.no" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \;
|
|
||||||
- wget https://github.com/linux-test-project/lcov/archive/v1.12.zip
|
|
||||||
- unzip v1.12.zip
|
|
||||||
- LCOV="`pwd`/lcov-1.12/bin/lcov --gcov-tool gcov-6"
|
|
||||||
|
|
||||||
# Preparing Coveralls data by changind data format to a readable one
|
|
||||||
- echo "$LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info"
|
|
||||||
- $LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info
|
|
||||||
|
|
||||||
# ... erasing /test/ /example/ folder data
|
|
||||||
- cd $BOOST
|
|
||||||
- $LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info "/usr*" "*/$BOOST_LIBS_FOLDER/test/*" $IGNORE_COVERAGE "*/$BOOST_LIBS_FOLDER/tests/*" "*/$BOOST_LIBS_FOLDER/examples/*" "*/$BOOST_LIBS_FOLDER/example/*" -o $TRAVIS_BUILD_DIR/coverals/coverage.info
|
|
||||||
|
|
||||||
# ... erasing data that is not related to this project directly
|
|
||||||
- OTHER_LIBS=`grep "submodule .*" .gitmodules | sed 's/\[submodule\ "\(.*\)"\]/"\*\/boost\/\1\.hpp" "\*\/boost\/\1\/\*"/g'| sed "/\"\*\/boost\/$BOOST_LIBS_FOLDER\/\*\"/d" | sed ':a;N;$!ba;s/\n/ /g'`
|
|
||||||
- echo $OTHER_LIBS
|
|
||||||
- eval "$LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info $OTHER_LIBS -o $TRAVIS_BUILD_DIR/coverals/coverage.info"
|
|
||||||
|
|
||||||
# Sending data to Coveralls
|
|
||||||
- cd $TRAVIS_BUILD_DIR
|
|
||||||
- gem install coveralls-lcov
|
|
||||||
- coveralls-lcov coverals/coverage.info
|
|
||||||
+6
-9
@@ -1,12 +1,9 @@
|
|||||||
# Copyright 2019 Mike Dev
|
# Copyright 2019 Mike Dev
|
||||||
# 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 https://www.boost.org/LICENSE_1_0.txt
|
# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
|
||||||
#
|
|
||||||
# NOTE: CMake support for Boost.Conversion is currently experimental at best
|
|
||||||
# and the interface is likely to change in the future
|
|
||||||
|
|
||||||
cmake_minimum_required( VERSION 3.5 )
|
cmake_minimum_required( VERSION 3.5...4.20 )
|
||||||
project( BoostConversion LANGUAGES CXX )
|
project( boost_conversion VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX )
|
||||||
|
|
||||||
add_library( boost_conversion INTERFACE )
|
add_library( boost_conversion INTERFACE )
|
||||||
add_library( Boost::conversion ALIAS boost_conversion )
|
add_library( Boost::conversion ALIAS boost_conversion )
|
||||||
@@ -17,9 +14,9 @@ target_link_libraries( boost_conversion
|
|||||||
INTERFACE
|
INTERFACE
|
||||||
Boost::assert
|
Boost::assert
|
||||||
Boost::config
|
Boost::config
|
||||||
Boost::core
|
|
||||||
Boost::smart_ptr
|
|
||||||
Boost::throw_exception
|
Boost::throw_exception
|
||||||
Boost::type_traits
|
|
||||||
Boost::typeof
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(BUILD_TESTING)
|
||||||
|
add_subdirectory(test)
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
# [Boost.Conversion](http://boost.org/libs/conversion)
|
# [Boost.Conversion](https://boost.org/libs/conversion)
|
||||||
Boost.Conversion is one of the [Boost C++ Libraries](http://github.com/boostorg). This library improves program safety and clarity by performing otherwise messy conversions.
|
Boost.Conversion is one of the [Boost C++ Libraries](https://github.com/boostorg). This library improves program safety and clarity by performing otherwise messy conversions.
|
||||||
|
|
||||||
### Test results
|
### Test results
|
||||||
|
|
||||||
@ | Build | Tests coverage | More info
|
@ | Build | Tests coverage | More info
|
||||||
----------------|-------------- | -------------- |-----------
|
----------------|-------------- | -------------- |-----------
|
||||||
Develop branch: | [](https://travis-ci.org/apolukhin/conversion) [](https://ci.appveyor.com/project/apolukhin/conversion/branch/develop) | [](https://coveralls.io/r/apolukhin/conversion?branch=develop) | [details...](http://www.boost.org/development/tests/develop/developer/conversion.html)
|
Develop branch: | [](https://github.com/boostorg/conversion/actions/workflows/ci.yml) [](https://ci.appveyor.com/project/apolukhin/conversion/branch/develop) | [](https://coveralls.io/github/boostorg/conversion?branch=develop) | [details...](https://regression.boost.io/develop/developer/conversion.html)
|
||||||
Master branch: | [](https://travis-ci.org/apolukhin/conversion) [](https://ci.appveyor.com/project/apolukhin/conversion/branch/master) | [](https://coveralls.io/r/apolukhin/conversion?branch=master) | [details...](http://www.boost.org/development/tests/master/developer/conversion.html)
|
Master branch: | [](https://github.com/boostorg/conversion/actions/workflows/ci.yml) [](https://ci.appveyor.com/project/apolukhin/conversion/branch/master) | [](https://coveralls.io/github/boostorg/conversion?branch=master) | [details...](https://regression.boost.io/master/developer/conversion.html)
|
||||||
|
|
||||||
|
[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/html/conversion.html)
|
||||||
[Open Issues](https://svn.boost.org/trac/boost/query?status=!closed&component=conversion&or&status=!closed&component=lexical_cast)
|
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
Distributed under the [Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).
|
Distributed under the [Boost Software License, Version 1.0](https://boost.org/LICENSE_1_0.txt).
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Copyright René Ferdinand Rivera Morell 2023-2024
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
require-b2 5.2 ;
|
||||||
|
|
||||||
|
constant boost_dependencies :
|
||||||
|
/boost/assert//boost_assert
|
||||||
|
/boost/config//boost_config
|
||||||
|
/boost/throw_exception//boost_throw_exception ;
|
||||||
|
|
||||||
|
project /boost/conversion
|
||||||
|
: common-requirements
|
||||||
|
<include>include
|
||||||
|
;
|
||||||
|
|
||||||
|
explicit
|
||||||
|
[ alias boost_conversion : : : : <library>$(boost_dependencies) ]
|
||||||
|
[ alias all : boost_conversion test ]
|
||||||
|
;
|
||||||
|
|
||||||
|
call-if : boost-library conversion
|
||||||
|
;
|
||||||
|
|
||||||
+10
-13
@@ -1,6 +1,6 @@
|
|||||||
[/
|
[/
|
||||||
Copyright 2016 Mikhail Maximov.
|
Copyright 2016 Mikhail Maximov.
|
||||||
Copyright 2020 Antony Polukhin.
|
Copyright Antony Polukhin, 2020-2026.
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)
|
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
[id conversion]
|
[id conversion]
|
||||||
[version 1.7]
|
[version 1.7]
|
||||||
[authors [Stroustrup, Bjarne], [Abrahams, Dave], [Rasin, Boris], [Polukhin, Antony]]
|
[authors [Stroustrup, Bjarne], [Abrahams, Dave], [Rasin, Boris], [Polukhin, Antony]]
|
||||||
[copyright 2001 Beman Dawes, 2014-2020 Antony Polukhin]
|
[copyright 2001 Beman Dawes, 2014-2026 Antony Polukhin]
|
||||||
[license
|
[license
|
||||||
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
|
(See accompanying file LICENSE_1_0.txt or copy at
|
||||||
@@ -30,8 +30,7 @@ The Conversion Library improves program safety and clarity by performing
|
|||||||
otherwise messy conversions. It includes cast-style function templates designed
|
otherwise messy conversions. It includes cast-style function templates designed
|
||||||
to complement the C++ Standard's built-in casts.
|
to complement the C++ Standard's built-in casts.
|
||||||
|
|
||||||
To reduce coupling, particularly to standard library IOStreams,
|
To reduce coupling, the Boost Conversion Library is supplied by several headers:
|
||||||
the Boost Conversion Library is supplied by several headers:
|
|
||||||
|
|
||||||
# The [@boost:boost/polymorphic_cast.hpp boost/polymorphic_cast.hpp] header
|
# The [@boost:boost/polymorphic_cast.hpp boost/polymorphic_cast.hpp] header
|
||||||
provides [link polymorphic_cast `polymorphic_cast<>`] and
|
provides [link polymorphic_cast `polymorphic_cast<>`] and
|
||||||
@@ -42,8 +41,6 @@ the Boost Conversion Library is supplied by several headers:
|
|||||||
[link polymorphic_pointer_cast `polymorphic_pointer_downcast<>`]
|
[link polymorphic_pointer_cast `polymorphic_pointer_downcast<>`]
|
||||||
# The [@boost:boost/implicit_cast.hpp boost/implicit_cast.hpp] header provides `implicit_cast<>`
|
# The [@boost:boost/implicit_cast.hpp boost/implicit_cast.hpp] header provides `implicit_cast<>`
|
||||||
to perform implicit casts only (no down-cast, no void*->T*, no U->T if T has only explicit constructors for U).
|
to perform implicit casts only (no down-cast, no void*->T*, no U->T if T has only explicit constructors for U).
|
||||||
# The [@boost:boost/lexical_cast.hpp boost/lexical_cast.hpp] header
|
|
||||||
provides [@boost:libs/lexical_cast/doc/html/index.html `lexical_cast<>`] general literal text conversions, such as an `int` represented as a `string`, or vice-versa.
|
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
@@ -153,10 +150,10 @@ This includes C++ built-in pointers, `std::shared_ptr`,
|
|||||||
class Banana : public Fruit {};
|
class Banana : public Fruit {};
|
||||||
|
|
||||||
// Use one of these:
|
// Use one of these:
|
||||||
typedef Fruit* FruitPtr;
|
using FruitPtr = Fruit*;
|
||||||
typedef std::shared_ptr<Fruit> FruitPtr;
|
using FruitPtr = std::shared_ptr<Fruit>;
|
||||||
typedef boost::shared_ptr<Fruit> FruitPtr;
|
using FruitPtr = boost::shared_ptr<Fruit>;
|
||||||
typedef boost::intrusive_ptr<Fruit> FruitPtr;
|
using FruitPtr = boost::intrusive_ptr<Fruit>;
|
||||||
|
|
||||||
void f(FruitPtr fruit) {
|
void f(FruitPtr fruit) {
|
||||||
// ... logic which leads us to believe it is a banana
|
// ... logic which leads us to believe it is a banana
|
||||||
@@ -176,17 +173,17 @@ This includes C++ built-in pointers, `std::shared_ptr`,
|
|||||||
// Throws: std::bad_cast if ( dynamic_cast<Derived>(x) == 0 )
|
// Throws: std::bad_cast if ( dynamic_cast<Derived>(x) == 0 )
|
||||||
// Returns: dynamic_cast<Derived>(x)
|
// Returns: dynamic_cast<Derived>(x)
|
||||||
template <class Derived, class Base>
|
template <class Derived, class Base>
|
||||||
inline Derived polymorphic_cast(Base* x);
|
constexpr Derived polymorphic_cast(Base* x);
|
||||||
|
|
||||||
// Effects: assert( dynamic_cast<Derived>(x) == x );
|
// Effects: assert( dynamic_cast<Derived>(x) == x );
|
||||||
// Returns: static_cast<Derived>(x)
|
// Returns: static_cast<Derived>(x)
|
||||||
template <class Derived, class Base>
|
template <class Derived, class Base>
|
||||||
inline Derived polymorphic_downcast(Base* x);
|
constexpr Derived polymorphic_downcast(Base* x);
|
||||||
|
|
||||||
// Effects: assert( dynamic_cast<Derived>(&x) == &x );
|
// Effects: assert( dynamic_cast<Derived>(&x) == &x );
|
||||||
// Returns: static_cast<Derived>(x)
|
// Returns: static_cast<Derived>(x)
|
||||||
template <class Derived, class Base>
|
template <class Derived, class Base>
|
||||||
inline Derived polymorphic_downcast(Base& x);
|
constexpr Derived polymorphic_downcast(Base& x);
|
||||||
|
|
||||||
// Throws: std::bad_cast if ( dynamic_pointer_cast<Derived>(x) == 0 )
|
// Throws: std::bad_cast if ( dynamic_pointer_cast<Derived>(x) == 0 )
|
||||||
// Returns: dynamic_pointer_cast<Derived>(x)
|
// Returns: dynamic_pointer_cast<Derived>(x)
|
||||||
|
|||||||
@@ -6,13 +6,18 @@
|
|||||||
#ifndef BOOST_IMPLICIT_CAST_DWA200356_HPP
|
#ifndef BOOST_IMPLICIT_CAST_DWA200356_HPP
|
||||||
#define BOOST_IMPLICIT_CAST_DWA200356_HPP
|
#define BOOST_IMPLICIT_CAST_DWA200356_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
# pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
|
||||||
template<class T> struct icast_identity
|
template<class T> struct icast_identity
|
||||||
{
|
{
|
||||||
typedef T type;
|
using type = T;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
@@ -23,7 +28,7 @@ template<class T> struct icast_identity
|
|||||||
// The use of identity creates a non-deduced form, so that the
|
// The use of identity creates a non-deduced form, so that the
|
||||||
// explicit template argument must be supplied
|
// explicit template argument must be supplied
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline T implicit_cast (typename boost::detail::icast_identity<T>::type x) {
|
constexpr T implicit_cast (typename boost::detail::icast_identity<T>::type x) {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
// 08 Nov 14 Add polymorphic_pointer_downcast (Boris Rasin)
|
// 08 Nov 14 Add polymorphic_pointer_downcast (Boris Rasin)
|
||||||
// 09 Jun 14 "cast.hpp" was renamed to "polymorphic_cast.hpp" and
|
// 09 Jun 14 "cast.hpp" was renamed to "polymorphic_cast.hpp" and
|
||||||
// inclusion of numeric_cast was removed (Antony Polukhin)
|
// inclusion of numeric_cast was removed (Antony Polukhin)
|
||||||
// 23 Jun 05 numeric_cast removed and redirected to the new verion (Fernando Cacciola)
|
// 23 Jun 05 numeric_cast removed and redirected to the new version (Fernando Cacciola)
|
||||||
// 02 Apr 01 Removed BOOST_NO_LIMITS workarounds and included
|
// 02 Apr 01 Removed BOOST_NO_LIMITS workarounds and included
|
||||||
// <boost/limits.hpp> instead (the workaround did not
|
// <boost/limits.hpp> instead (the workaround did not
|
||||||
// actually compile when BOOST_NO_LIMITS was defined in
|
// actually compile when BOOST_NO_LIMITS was defined in
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
// 19 Oct 00 Fix numeric_cast for floating-point types (Dave Abrahams)
|
// 19 Oct 00 Fix numeric_cast for floating-point types (Dave Abrahams)
|
||||||
// 15 Jul 00 Suppress numeric_cast warnings for GCC, Borland and MSVC
|
// 15 Jul 00 Suppress numeric_cast warnings for GCC, Borland and MSVC
|
||||||
// (Dave Abrahams)
|
// (Dave Abrahams)
|
||||||
// 30 Jun 00 More MSVC6 wordarounds. See comments below. (Dave Abrahams)
|
// 30 Jun 00 More MSVC6 workarounds. See comments below. (Dave Abrahams)
|
||||||
// 28 Jun 00 Removed implicit_cast<>. See comment below. (Beman Dawes)
|
// 28 Jun 00 Removed implicit_cast<>. See comment below. (Beman Dawes)
|
||||||
// 27 Jun 00 More MSVC6 workarounds
|
// 27 Jun 00 More MSVC6 workarounds
|
||||||
// 15 Jun 00 Add workarounds for MSVC6
|
// 15 Jun 00 Add workarounds for MSVC6
|
||||||
@@ -49,20 +49,24 @@
|
|||||||
#ifndef BOOST_POLYMORPHIC_CAST_HPP
|
#ifndef BOOST_POLYMORPHIC_CAST_HPP
|
||||||
#define BOOST_POLYMORPHIC_CAST_HPP
|
#define BOOST_POLYMORPHIC_CAST_HPP
|
||||||
|
|
||||||
# include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
# pragma once
|
# pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include <boost/assert.hpp>
|
# include <boost/assert.hpp>
|
||||||
# include <boost/core/addressof.hpp>
|
|
||||||
# include <boost/core/enable_if.hpp>
|
|
||||||
# include <boost/throw_exception.hpp>
|
# include <boost/throw_exception.hpp>
|
||||||
# include <boost/type_traits/is_reference.hpp>
|
|
||||||
# include <boost/type_traits/remove_reference.hpp>
|
|
||||||
|
|
||||||
|
# include <memory> // std::addressof
|
||||||
# include <typeinfo>
|
# include <typeinfo>
|
||||||
|
# include <type_traits>
|
||||||
|
|
||||||
|
#if defined(__cpp_constexpr) && __cpp_constexpr >= 201907L
|
||||||
|
#define BOOST_CONVERSION_IMPL_CONSTEXPR_DYN_CAST constexpr
|
||||||
|
#else
|
||||||
|
#define BOOST_CONVERSION_IMPL_CONSTEXPR_DYN_CAST inline
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
{
|
{
|
||||||
@@ -76,7 +80,7 @@ namespace boost
|
|||||||
// section 15.8 exercise 1, page 425.
|
// section 15.8 exercise 1, page 425.
|
||||||
|
|
||||||
template <class Target, class Source>
|
template <class Target, class Source>
|
||||||
inline Target polymorphic_cast(Source* x)
|
BOOST_CONVERSION_IMPL_CONSTEXPR_DYN_CAST Target polymorphic_cast(Source* x)
|
||||||
{
|
{
|
||||||
Target tmp = dynamic_cast<Target>(x);
|
Target tmp = dynamic_cast<Target>(x);
|
||||||
if ( tmp == 0 ) boost::throw_exception( std::bad_cast() );
|
if ( tmp == 0 ) boost::throw_exception( std::bad_cast() );
|
||||||
@@ -95,7 +99,7 @@ namespace boost
|
|||||||
// Contributed by Dave Abrahams
|
// Contributed by Dave Abrahams
|
||||||
|
|
||||||
template <class Target, class Source>
|
template <class Target, class Source>
|
||||||
inline Target polymorphic_downcast(Source* x)
|
BOOST_CONVERSION_IMPL_CONSTEXPR_DYN_CAST Target polymorphic_downcast(Source* x)
|
||||||
{
|
{
|
||||||
BOOST_ASSERT( dynamic_cast<Target>(x) == x ); // detect logic error
|
BOOST_ASSERT( dynamic_cast<Target>(x) == x ); // detect logic error
|
||||||
return static_cast<Target>(x);
|
return static_cast<Target>(x);
|
||||||
@@ -111,16 +115,18 @@ namespace boost
|
|||||||
// Contributed by Julien Delacroix
|
// Contributed by Julien Delacroix
|
||||||
|
|
||||||
template <class Target, class Source>
|
template <class Target, class Source>
|
||||||
inline typename boost::enable_if_c<
|
BOOST_CONVERSION_IMPL_CONSTEXPR_DYN_CAST typename std::enable_if<
|
||||||
boost::is_reference<Target>::value, Target
|
std::is_reference<Target>::value, Target
|
||||||
>::type polymorphic_downcast(Source& x)
|
>::type polymorphic_downcast(Source& x)
|
||||||
{
|
{
|
||||||
typedef typename boost::remove_reference<Target>::type* target_pointer_type;
|
using target_pointer_type = typename std::remove_reference<Target>::type*;
|
||||||
return *boost::polymorphic_downcast<target_pointer_type>(
|
return *boost::polymorphic_downcast<target_pointer_type>(
|
||||||
boost::addressof(x)
|
std::addressof(x)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
|
||||||
|
#undef BOOST_CONVERSION_IMPL_CONSTEXPR_DYN_CAST
|
||||||
|
|
||||||
#endif // BOOST_POLYMORPHIC_CAST_HPP
|
#endif // BOOST_POLYMORPHIC_CAST_HPP
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// boost polymorphic_pointer_cast.hpp header file ----------------------------------------------//
|
// boost polymorphic_pointer_cast.hpp header file ----------------------------------------------//
|
||||||
// (C) Copyright Boris Rasin and Antony Polukhin 2014-2019.
|
// (C) Copyright Boris Rasin, 2014-2021.
|
||||||
|
// (C) Copyright Antony Polukhin, 2014-2026.
|
||||||
// Distributed under the Boost
|
// Distributed under the Boost
|
||||||
// Software License, Version 1.0. (See accompanying file
|
// Software License, Version 1.0. (See accompanying file
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
@@ -9,19 +10,16 @@
|
|||||||
#ifndef BOOST_CONVERSION_POLYMORPHIC_POINTER_CAST_HPP
|
#ifndef BOOST_CONVERSION_POLYMORPHIC_POINTER_CAST_HPP
|
||||||
#define BOOST_CONVERSION_POLYMORPHIC_POINTER_CAST_HPP
|
#define BOOST_CONVERSION_POLYMORPHIC_POINTER_CAST_HPP
|
||||||
|
|
||||||
# include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
# include <boost/assert.hpp>
|
|
||||||
# include <boost/pointer_cast.hpp>
|
|
||||||
# include <boost/throw_exception.hpp>
|
|
||||||
# include <boost/utility/declval.hpp>
|
|
||||||
# ifdef BOOST_NO_CXX11_DECLTYPE
|
|
||||||
# include <boost/typeof/typeof.hpp>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
# pragma once
|
# pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
# include <boost/assert.hpp>
|
||||||
|
# include <boost/pointer_cast.hpp>
|
||||||
|
# include <boost/throw_exception.hpp>
|
||||||
|
|
||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
{
|
{
|
||||||
// See the documentation for descriptions of how to choose between
|
// See the documentation for descriptions of how to choose between
|
||||||
@@ -40,36 +38,20 @@ namespace boost
|
|||||||
|
|
||||||
// Contributed by Boris Rasin
|
// Contributed by Boris Rasin
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
template <typename Target, typename Source>
|
|
||||||
struct dynamic_pointer_cast_result
|
|
||||||
{
|
|
||||||
#ifdef BOOST_NO_CXX11_DECLTYPE
|
|
||||||
BOOST_TYPEOF_NESTED_TYPEDEF_TPL(nested, dynamic_pointer_cast<Target>(boost::declval<Source>()))
|
|
||||||
typedef typename nested::type type;
|
|
||||||
#else
|
|
||||||
typedef decltype(dynamic_pointer_cast<Target>(boost::declval<Source>())) type;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Target, typename Source>
|
template <typename Target, typename Source>
|
||||||
inline typename detail::dynamic_pointer_cast_result<Target, Source>::type
|
inline auto polymorphic_pointer_downcast (const Source& x)
|
||||||
polymorphic_pointer_downcast (const Source& x)
|
-> decltype(static_pointer_cast<Target>(x))
|
||||||
{
|
{
|
||||||
BOOST_ASSERT(dynamic_pointer_cast<Target> (x) == x);
|
BOOST_ASSERT(dynamic_pointer_cast<Target> (x) == x);
|
||||||
return static_pointer_cast<Target> (x);
|
return static_pointer_cast<Target> (x);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Target, typename Source>
|
template <typename Target, typename Source>
|
||||||
inline typename detail::dynamic_pointer_cast_result<Target, Source>::type
|
inline auto polymorphic_pointer_cast (const Source& x)
|
||||||
polymorphic_pointer_cast (const Source& x)
|
-> decltype(dynamic_pointer_cast<Target>(x))
|
||||||
{
|
{
|
||||||
typename detail::dynamic_pointer_cast_result<Target, Source>::type tmp
|
auto tmp = dynamic_pointer_cast<Target> (x);
|
||||||
= dynamic_pointer_cast<Target> (x);
|
|
||||||
if ( !tmp ) boost::throw_exception( std::bad_cast() );
|
if ( !tmp ) boost::throw_exception( std::bad_cast() );
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -2,10 +2,14 @@
|
|||||||
<!--
|
<!--
|
||||||
Copyright (c) 2016 Mikhail Maximov
|
Copyright (c) 2016 Mikhail Maximov
|
||||||
vigorous.activity at gmail dot com
|
vigorous.activity at gmail dot com
|
||||||
|
|
||||||
|
Copyright (c) Antony Polukhin, 2021-2026
|
||||||
|
|
||||||
Distributed under the Boost Software License,
|
Distributed under the Boost Software License,
|
||||||
Version 1.0. (See accompanying file LICENSE_1_0.txt
|
Version 1.0. (See accompanying file LICENSE_1_0.txt
|
||||||
or copy at http://boost.org/LICENSE_1_0.txt)
|
or copy at http://boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
boost-no-inspect
|
||||||
-->
|
-->
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
@@ -29,7 +33,7 @@
|
|||||||
<a href="../../doc/html/conversion.html">../../doc/html/conversion.html</a>
|
<a href="../../doc/html/conversion.html">../../doc/html/conversion.html</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
© 2014-2020 Antony Polukhin
|
© Antony Polukhin, 2014-2024
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+2
-1
@@ -11,5 +11,6 @@
|
|||||||
],
|
],
|
||||||
"maintainers": [
|
"maintainers": [
|
||||||
"Antony Polukhin <antoshkka -at- gmail.com>"
|
"Antony Polukhin <antoshkka -at- gmail.com>"
|
||||||
]
|
],
|
||||||
|
"cxxstd": "11"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Copyright (c) 2016-2026 Antony Polukhin
|
||||||
|
# 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(BoostTest OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST)
|
||||||
|
|
||||||
|
if(NOT HAVE_BOOST_TEST)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(BOOST_TEST_LINK_LIBRARIES Boost::conversion Boost::core)
|
||||||
|
|
||||||
|
boost_test(TYPE run SOURCES cast_test.cpp)
|
||||||
|
boost_test(TYPE run SOURCES implicit_cast.cpp)
|
||||||
|
boost_test(TYPE compile-fail SOURCES implicit_cast_fail.cpp)
|
||||||
|
boost_test(TYPE compile-fail SOURCES implicit_cast_fail2.cpp)
|
||||||
|
boost_test(TYPE run SOURCES polymorphic_cast_test.cpp LINK_LIBRARIES Boost::smart_ptr)
|
||||||
+7
-5
@@ -1,18 +1,20 @@
|
|||||||
# Copyright (C) 2001-2003 Douglas Gregor
|
# Copyright (C) 2001-2003 Douglas Gregor
|
||||||
# Copyright (C) 2011-2014 Antony Polukhin
|
# Copyright (C) Antony Polukhin, 2011-2024
|
||||||
#
|
#
|
||||||
# Distributed under the Boost Software License, Version 1.0. (See accompanying
|
# 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)
|
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
#
|
#
|
||||||
|
|
||||||
|
require-b2 5.0.1 ;
|
||||||
|
import-search /boost/config/checks ;
|
||||||
|
import config : requires ;
|
||||||
import testing ;
|
import testing ;
|
||||||
import feature ;
|
import feature ;
|
||||||
|
|
||||||
project
|
project
|
||||||
: requirements
|
: requirements
|
||||||
<toolset>gcc-4.7:<cxxflags>-ftrapv
|
<library>/boost/conversion//boost_conversion
|
||||||
<toolset>gcc-4.6:<cxxflags>-ftrapv
|
[ requires cxx11_decltype ]
|
||||||
<toolset>clang:<cxxflags>-ftrapv
|
|
||||||
# default to all warnings on:
|
# default to all warnings on:
|
||||||
<warnings>all
|
<warnings>all
|
||||||
# set warnings as errors for those compilers we know we get warning free:
|
# set warnings as errors for those compilers we know we get warning free:
|
||||||
@@ -24,6 +26,6 @@ test-suite conversion
|
|||||||
: [ run implicit_cast.cpp ]
|
: [ run implicit_cast.cpp ]
|
||||||
[ compile-fail implicit_cast_fail.cpp ]
|
[ compile-fail implicit_cast_fail.cpp ]
|
||||||
[ run cast_test.cpp ]
|
[ run cast_test.cpp ]
|
||||||
[ run polymorphic_cast_test.cpp ]
|
[ run polymorphic_cast_test.cpp : : : <library>/boost/smart_ptr//boost_smart_ptr ]
|
||||||
[ compile-fail implicit_cast_fail2.cpp ]
|
[ compile-fail implicit_cast_fail2.cpp ]
|
||||||
;
|
;
|
||||||
|
|||||||
+3
-5
@@ -2,7 +2,7 @@
|
|||||||
# subject to the Boost Software License, Version 1.0. (See accompanying
|
# 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)
|
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
#
|
#
|
||||||
# Copyright Antony Polukhin 2016-2019.
|
# Copyright Antony Polukhin, 2016-2025.
|
||||||
|
|
||||||
#
|
#
|
||||||
# See https://svn.boost.org/trac/boost/wiki/TravisCoverals for description of this file
|
# See https://svn.boost.org/trac/boost/wiki/TravisCoverals for description of this file
|
||||||
@@ -21,7 +21,7 @@ init:
|
|||||||
# From this point and below code is same for all the Boost libs
|
# From this point and below code is same for all the Boost libs
|
||||||
###############################################################################################################
|
###############################################################################################################
|
||||||
|
|
||||||
version: 1.71.{build}-{branch}
|
version: 1.84.{build}-{branch}
|
||||||
|
|
||||||
# branches to build
|
# branches to build
|
||||||
branches:
|
branches:
|
||||||
@@ -32,8 +32,6 @@ skip_tags: true
|
|||||||
|
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
|
||||||
TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0,msvc-12.0
|
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
TOOLSET: msvc-14.1,clang-win
|
TOOLSET: msvc-14.1,clang-win
|
||||||
CXXSTD: 14,17
|
CXXSTD: 14,17
|
||||||
@@ -67,7 +65,7 @@ before_build:
|
|||||||
|
|
||||||
- rm -rf %BOOST%/libs/%BOOST_LIBS_FOLDER%
|
- rm -rf %BOOST%/libs/%BOOST_LIBS_FOLDER%
|
||||||
- mv -f %APPVEYOR_BUILD_FOLDER% %BOOST%/libs/%BOOST_LIBS_FOLDER%
|
- mv -f %APPVEYOR_BUILD_FOLDER% %BOOST%/libs/%BOOST_LIBS_FOLDER%
|
||||||
- python tools/boostdep/depinst/depinst.py --git_args "--depth 1 --jobs 2" %BOOST_LIBS_FOLDER%
|
- python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 2" %BOOST_LIBS_FOLDER%
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cmd /c bootstrap
|
- cmd /c bootstrap
|
||||||
|
|||||||
@@ -38,6 +38,48 @@ namespace
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr bool compile_time_polymorphic_cast_check() {
|
||||||
|
#if defined(__cpp_constexpr) && __cpp_constexpr >= 201907L
|
||||||
|
Derived derived;
|
||||||
|
Base* base = &derived;
|
||||||
|
return polymorphic_cast<Derived*>(base) != nullptr;
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static_assert(
|
||||||
|
compile_time_polymorphic_cast_check(),
|
||||||
|
"polymorphic_cast does not work at compile time"
|
||||||
|
);
|
||||||
|
|
||||||
|
constexpr bool compile_time_polymorphic_downcast_check() {
|
||||||
|
#if defined(__cpp_constexpr) && __cpp_constexpr >= 201907L
|
||||||
|
Derived derived;
|
||||||
|
Base* base = &derived;
|
||||||
|
return polymorphic_downcast<Derived*>(base) != nullptr;
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static_assert(
|
||||||
|
compile_time_polymorphic_downcast_check(),
|
||||||
|
"polymorphic_downcast does not work at compile time"
|
||||||
|
);
|
||||||
|
|
||||||
|
constexpr bool compile_time_polymorphic_downcast2_check() {
|
||||||
|
#if defined(__cpp_constexpr) && __cpp_constexpr >= 201907L
|
||||||
|
Derived derived;
|
||||||
|
Base& base = derived;
|
||||||
|
Derived& derived_again = polymorphic_downcast<Derived&>(base);
|
||||||
|
(void)derived_again;
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static_assert(
|
||||||
|
compile_time_polymorphic_downcast2_check(),
|
||||||
|
"polymorphic_downcast does not work at compile time"
|
||||||
|
);
|
||||||
|
|
||||||
int main( int argc, char * argv[] )
|
int main( int argc, char * argv[] )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,8 +4,9 @@
|
|||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#include <boost/implicit_cast.hpp>
|
#include <boost/implicit_cast.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/core/lightweight_test.hpp>
|
||||||
#include <boost/type.hpp>
|
#include <boost/type.hpp>
|
||||||
|
|
||||||
using boost::implicit_cast;
|
using boost::implicit_cast;
|
||||||
using boost::type;
|
using boost::type;
|
||||||
|
|
||||||
@@ -18,8 +19,8 @@ struct foo
|
|||||||
operator long() const { return 0; }
|
operator long() const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef type<long> long_type;
|
using long_type = type<long>;
|
||||||
typedef type<foo> foo_type;
|
using foo_type = type<foo>;
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
@@ -34,5 +35,9 @@ int main()
|
|||||||
(void)f;
|
(void)f;
|
||||||
(void)z;
|
(void)z;
|
||||||
|
|
||||||
|
|
||||||
|
constexpr long value = boost::implicit_cast<long>(42);
|
||||||
|
BOOST_TEST(value == 42L);
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
// Copyright 1999 Dave Abrahams
|
// Copyright 1999 Dave Abrahams
|
||||||
// Copyright 2014 Peter Dimov
|
// Copyright 2014 Peter Dimov
|
||||||
// Copyright 2014 Boris Rasin, Antony Polukhin
|
// Copyright 2014 Boris Rasin, Antony Polukhin
|
||||||
|
// Copyright 2023 Antony Polukhin
|
||||||
//
|
//
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
//
|
//
|
||||||
@@ -237,8 +238,6 @@ static void test_polymorphic_pointer_downcast_intrusive()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef BOOST_NO_CXX11_SMART_PTR
|
|
||||||
|
|
||||||
static void test_polymorphic_pointer_downcast_std_shared()
|
static void test_polymorphic_pointer_downcast_std_shared()
|
||||||
{
|
{
|
||||||
std::shared_ptr<Base> base (new Derived);
|
std::shared_ptr<Base> base (new Derived);
|
||||||
@@ -253,8 +252,6 @@ static void test_polymorphic_pointer_downcast_std_shared()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void test_polymorphic_cast_fail()
|
static void test_polymorphic_cast_fail()
|
||||||
{
|
{
|
||||||
Base * base = new Base;
|
Base * base = new Base;
|
||||||
@@ -272,9 +269,7 @@ static void test_polymorphic_pointer_cast_fail()
|
|||||||
|
|
||||||
BOOST_TEST_THROWS( boost::polymorphic_pointer_cast<Derived>( boost::shared_ptr<Base>(new Base) ), std::bad_cast );
|
BOOST_TEST_THROWS( boost::polymorphic_pointer_cast<Derived>( boost::shared_ptr<Base>(new Base) ), std::bad_cast );
|
||||||
|
|
||||||
#ifndef BOOST_NO_CXX11_SMART_PTR
|
|
||||||
BOOST_TEST_THROWS( boost::polymorphic_pointer_cast<Derived>( std::shared_ptr<Base>(new Base) ), std::bad_cast );
|
BOOST_TEST_THROWS( boost::polymorphic_pointer_cast<Derived>( std::shared_ptr<Base>(new Base) ), std::bad_cast );
|
||||||
#endif
|
|
||||||
|
|
||||||
BOOST_TEST_THROWS( boost::polymorphic_pointer_cast<Derived>( boost::intrusive_ptr<Base>(new Base) ), std::bad_cast );
|
BOOST_TEST_THROWS( boost::polymorphic_pointer_cast<Derived>( boost::intrusive_ptr<Base>(new Base) ), std::bad_cast );
|
||||||
}
|
}
|
||||||
@@ -337,7 +332,6 @@ static void test_polymorphic_pointer_downcast_boost_shared_fail()
|
|||||||
expect_assertion = false;
|
expect_assertion = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef BOOST_NO_CXX11_SMART_PTR
|
|
||||||
|
|
||||||
static void test_polymorphic_pointer_downcast_std_shared_fail()
|
static void test_polymorphic_pointer_downcast_std_shared_fail()
|
||||||
{
|
{
|
||||||
@@ -352,7 +346,6 @@ static void test_polymorphic_pointer_downcast_std_shared_fail()
|
|||||||
expect_assertion = false;
|
expect_assertion = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void test_polymorphic_pointer_downcast_intrusive_fail()
|
static void test_polymorphic_pointer_downcast_intrusive_fail()
|
||||||
{
|
{
|
||||||
@@ -382,10 +375,9 @@ int main()
|
|||||||
test_polymorphic_pointer_downcast_boost_shared_fail();
|
test_polymorphic_pointer_downcast_boost_shared_fail();
|
||||||
test_polymorphic_pointer_downcast_intrusive_fail();
|
test_polymorphic_pointer_downcast_intrusive_fail();
|
||||||
|
|
||||||
#ifndef BOOST_NO_CXX11_SMART_PTR
|
|
||||||
test_polymorphic_pointer_downcast_std_shared();
|
test_polymorphic_pointer_downcast_std_shared();
|
||||||
test_polymorphic_pointer_downcast_std_shared_fail();
|
test_polymorphic_pointer_downcast_std_shared_fail();
|
||||||
#endif
|
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user