mirror of
https://github.com/boostorg/utility.git
synced 2025-10-05 21:40:59 +02:00
Compare commits
40 Commits
boost-1.82
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
dda83c5b60 | ||
|
082a9cd249 | ||
|
211570f2b9 | ||
|
7f1b54c3cc | ||
|
4c85489e91 | ||
|
fdd6586aa6 | ||
|
49cd132374 | ||
|
67d8cbd243 | ||
|
ec297bfdfb | ||
|
3a5e8f4aba | ||
|
9939ea24d1 | ||
|
171647fb3e | ||
|
8f6116ada4 | ||
|
2a37aaaeb4 | ||
|
79c293351f | ||
|
a481266238 | ||
|
2aa26c9e84 | ||
|
31de9279d8 | ||
|
6d870ad5e3 | ||
|
80ede74e8c | ||
|
12c95c48cf | ||
|
336c00b659 | ||
|
bf21064bfd | ||
|
2a8ce8e081 | ||
|
e0ecf92764 | ||
|
bff26e4fa1 | ||
|
9abd1fc78d | ||
|
3829fcbef4 | ||
|
21d6434320 | ||
|
2ac19511c2 | ||
|
217f7346f6 | ||
|
85b5594f32 | ||
|
a95a4f6580 | ||
|
076f050e9a | ||
|
e06b6dd788 | ||
|
219ee9855d | ||
|
cea4262e62 | ||
|
52e3e64a34 | ||
|
eb721609af | ||
|
b32d95a887 |
303
.github/workflows/ci.yml
vendored
303
.github/workflows/ci.yml
vendored
@@ -1,4 +1,4 @@
|
||||
# Copyright 2021-2022 Andrey Semashev
|
||||
# Copyright 2021-2025 Andrey Semashev
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
@@ -33,153 +33,155 @@ jobs:
|
||||
matrix:
|
||||
include:
|
||||
# Linux, gcc
|
||||
- toolset: gcc-4.4
|
||||
cxxstd: "98,0x"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- g++-4.4
|
||||
sources:
|
||||
- "ppa:ubuntu-toolchain-r/test"
|
||||
- toolset: gcc-4.6
|
||||
cxxstd: "03,0x"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- g++-4.6
|
||||
sources:
|
||||
- "ppa:ubuntu-toolchain-r/test"
|
||||
- toolset: gcc-4.7
|
||||
cxxstd: "03,11"
|
||||
cxxstd: "11"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- g++-4.7
|
||||
- toolset: gcc-4.8
|
||||
cxxstd: "03,11"
|
||||
cxxstd: "11"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
- g++-4.8
|
||||
- toolset: gcc-4.9
|
||||
cxxstd: "03,11"
|
||||
cxxstd: "11"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- g++-4.9
|
||||
- toolset: gcc-5
|
||||
cxxstd: "03,11,14,1z"
|
||||
cxxstd: "11,14,1z"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- g++-5
|
||||
- toolset: gcc-6
|
||||
cxxstd: "03,11,14,1z"
|
||||
cxxstd: "11,14,1z"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
- g++-6
|
||||
- toolset: gcc-7
|
||||
cxxstd: "03,11,14,17"
|
||||
cxxstd: "11,14,17"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
- g++-7
|
||||
- toolset: gcc-8
|
||||
cxxstd: "03,11,14,17,2a"
|
||||
cxxstd: "11,14,17,2a"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
- g++-8
|
||||
- toolset: gcc-9
|
||||
cxxstd: "03,11,14,17,2a"
|
||||
os: ubuntu-20.04
|
||||
cxxstd: "11,14,17,2a"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
install:
|
||||
- g++-9
|
||||
- toolset: gcc-10
|
||||
cxxstd: "03,11,14,17,20"
|
||||
os: ubuntu-20.04
|
||||
cxxstd: "11,14,17,20"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
install:
|
||||
- g++-10
|
||||
- toolset: gcc-11
|
||||
cxxstd: "03,11,14,17,20,23"
|
||||
cxxstd: "11,14,17,20,23"
|
||||
os: ubuntu-22.04
|
||||
install:
|
||||
- g++-11
|
||||
- toolset: gcc-12
|
||||
cxxstd: "03,11,14,17,20,23"
|
||||
cxxstd: "11,14,17,20,23"
|
||||
os: ubuntu-22.04
|
||||
install:
|
||||
- g++-12
|
||||
- toolset: gcc-13
|
||||
cxxstd: "11,14,17,20,23"
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- g++-13
|
||||
- toolset: gcc-14
|
||||
cxxstd: "11,14,17,20,23,26"
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- g++-14
|
||||
- toolset: gcc-15
|
||||
cxxstd: "11,14,17,20,23,26"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:25.04
|
||||
install:
|
||||
- g++-15
|
||||
- name: UBSAN
|
||||
toolset: gcc-11
|
||||
cxxstd: "03,11,14,17,20,23"
|
||||
toolset: gcc-13
|
||||
cxxstd: "11,14,17,20,23"
|
||||
ubsan: 1
|
||||
build_variant: debug
|
||||
os: ubuntu-22.04
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- g++-11
|
||||
- g++-13
|
||||
|
||||
# Linux, clang
|
||||
- toolset: clang
|
||||
compiler: clang++-3.5
|
||||
cxxstd: "03,11"
|
||||
cxxstd: "11"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- clang-3.5
|
||||
- toolset: clang
|
||||
compiler: clang++-3.6
|
||||
cxxstd: "03,11,14"
|
||||
cxxstd: "11,14"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- clang-3.6
|
||||
- toolset: clang
|
||||
compiler: clang++-3.7
|
||||
cxxstd: "03,11,14"
|
||||
cxxstd: "11,14"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- clang-3.7
|
||||
- toolset: clang
|
||||
compiler: clang++-3.8
|
||||
cxxstd: "03,11,14"
|
||||
cxxstd: "11,14"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:16.04
|
||||
install:
|
||||
- clang-3.8
|
||||
- toolset: clang
|
||||
compiler: clang++-3.9
|
||||
cxxstd: "03,11,14"
|
||||
cxxstd: "11,14"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
- clang-3.9
|
||||
- toolset: clang
|
||||
compiler: clang++-4.0
|
||||
cxxstd: "03,11,14"
|
||||
cxxstd: "11,14"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
- clang-4.0
|
||||
- toolset: clang
|
||||
compiler: clang++-5.0
|
||||
cxxstd: "03,11,14,1z"
|
||||
cxxstd: "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"
|
||||
cxxstd: "11,14,17"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
- clang-6.0
|
||||
- toolset: clang
|
||||
compiler: clang++-7
|
||||
cxxstd: "03,11,14,17"
|
||||
cxxstd: "11,14,17"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
@@ -187,7 +189,7 @@ jobs:
|
||||
# Note: clang-8 does not fully support C++20, so it is not compatible with libstdc++-8 in this mode
|
||||
- toolset: clang
|
||||
compiler: clang++-8
|
||||
cxxstd: "03,11,14,17,2a"
|
||||
cxxstd: "11,14,17,2a"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:18.04
|
||||
install:
|
||||
@@ -196,83 +198,125 @@ jobs:
|
||||
gcc_toolchain: 7
|
||||
- toolset: clang
|
||||
compiler: clang++-9
|
||||
cxxstd: "03,11,14,17,2a"
|
||||
os: ubuntu-20.04
|
||||
cxxstd: "11,14,17,2a"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
install:
|
||||
- clang-9
|
||||
- toolset: clang
|
||||
compiler: clang++-10
|
||||
cxxstd: "03,11,14,17,20"
|
||||
os: ubuntu-20.04
|
||||
cxxstd: "11,14,17,20"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
install:
|
||||
- clang-10
|
||||
- toolset: clang
|
||||
compiler: clang++-11
|
||||
cxxstd: "03,11,14,17,20"
|
||||
cxxstd: "11,14,17,20"
|
||||
os: ubuntu-22.04
|
||||
install:
|
||||
- clang-11
|
||||
- toolset: clang
|
||||
compiler: clang++-12
|
||||
cxxstd: "03,11,14,17,20,2b"
|
||||
cxxstd: "11,14,17,20,2b"
|
||||
os: ubuntu-22.04
|
||||
install:
|
||||
- clang-12
|
||||
- g++-11
|
||||
gcc_toolchain: 11
|
||||
- toolset: clang
|
||||
compiler: clang++-13
|
||||
cxxstd: "03,11,14,17,20,2b"
|
||||
cxxstd: "11,14,17,20,2b"
|
||||
os: ubuntu-22.04
|
||||
install:
|
||||
- clang-13
|
||||
- g++-11
|
||||
gcc_toolchain: 11
|
||||
- toolset: clang
|
||||
compiler: clang++-14
|
||||
cxxstd: "03,11,14,17,20,2b"
|
||||
cxxstd: "11,14,17,20,2b"
|
||||
os: ubuntu-22.04
|
||||
install:
|
||||
- clang-14
|
||||
- g++-11
|
||||
gcc_toolchain: 11
|
||||
- toolset: clang
|
||||
compiler: clang++-15
|
||||
cxxstd: "03,11,14,17,20,2b"
|
||||
cxxstd: "11,14,17,20,2b"
|
||||
os: ubuntu-22.04
|
||||
install:
|
||||
- clang-15
|
||||
sources:
|
||||
- "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main"
|
||||
source_keys:
|
||||
- "https://apt.llvm.org/llvm-snapshot.gpg.key"
|
||||
- g++-11
|
||||
gcc_toolchain: 11
|
||||
- toolset: clang
|
||||
compiler: clang++-15
|
||||
cxxstd: "03,11,14,17,20,2b"
|
||||
os: ubuntu-22.04
|
||||
compiler: clang++-16
|
||||
cxxstd: "11,14,17,20,2b"
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- clang-15
|
||||
- libc++-15-dev
|
||||
- libc++abi-15-dev
|
||||
sources:
|
||||
- "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main"
|
||||
source_keys:
|
||||
- "https://apt.llvm.org/llvm-snapshot.gpg.key"
|
||||
- clang-16
|
||||
- g++-11
|
||||
gcc_toolchain: 11
|
||||
- toolset: clang
|
||||
compiler: clang++-17
|
||||
cxxstd: "11,14,17,20,23"
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- clang-17
|
||||
- g++-11
|
||||
gcc_toolchain: 11
|
||||
- toolset: clang
|
||||
compiler: clang++-18
|
||||
cxxstd: "11,14,17,20,23,26"
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- clang-18
|
||||
- g++-13
|
||||
- toolset: clang
|
||||
compiler: clang++-19
|
||||
cxxstd: "11,14,17,20,23,26"
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- clang-19
|
||||
- toolset: clang
|
||||
compiler: clang++-20
|
||||
cxxstd: "11,14,17,20,23,26"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:25.04
|
||||
install:
|
||||
- clang-20
|
||||
- toolset: clang
|
||||
compiler: clang++-20
|
||||
cxxstd: "11,14,17,20,23,26"
|
||||
os: ubuntu-latest
|
||||
container: ubuntu:25.04
|
||||
install:
|
||||
- clang-20
|
||||
- libc++-20-dev
|
||||
- libc++abi-20-dev
|
||||
cxxflags: -stdlib=libc++
|
||||
linkflags: -stdlib=libc++
|
||||
- name: UBSAN
|
||||
toolset: clang
|
||||
compiler: clang++-14
|
||||
cxxstd: "03,11,14,17,20,2b"
|
||||
compiler: clang++-18
|
||||
cxxstd: "11,14,17,20,23"
|
||||
cxxflags: -stdlib=libc++
|
||||
linkflags: -stdlib=libc++
|
||||
linkflags: "-stdlib=libc++ -lubsan"
|
||||
ubsan: 1
|
||||
build_variant: debug
|
||||
os: ubuntu-22.04
|
||||
os: ubuntu-24.04
|
||||
install:
|
||||
- clang-14
|
||||
- libc++-14-dev
|
||||
- libc++abi-14-dev
|
||||
- clang-18
|
||||
- libc++-18-dev
|
||||
- libc++abi-18-dev
|
||||
|
||||
- toolset: clang
|
||||
cxxstd: "03,11,14,17,2a"
|
||||
os: macos-11
|
||||
cxxstd: "11,14,17,20,2b"
|
||||
os: macos-13
|
||||
- toolset: clang
|
||||
cxxstd: "11,14,17,20,2b"
|
||||
os: macos-14
|
||||
|
||||
timeout-minutes: 60
|
||||
timeout-minutes: 15
|
||||
runs-on: ${{matrix.os}}
|
||||
container: ${{matrix.container}}
|
||||
|
||||
@@ -289,6 +333,22 @@ jobs:
|
||||
echo "GHA_CONTAINER=${{matrix.container}}" >> $GITHUB_ENV
|
||||
if [ -f "/etc/debian_version" ]
|
||||
then
|
||||
# Use Azure APT mirrors in containers to avoid HTTP errors due to DDoS filters triggered by lots of CI jobs launching concurrently.
|
||||
# Note that not all Ubuntu versions support "mirror+file:..." URIs in APT sources, so just use Azure mirrors exclusively.
|
||||
# Note also that on recent Ubuntu versions DEB822 format is used for source files.
|
||||
APT_SOURCES=()
|
||||
if [ -d "/etc/apt/sources.list.d" ]
|
||||
then
|
||||
readarray -t APT_SOURCES < <(find "/etc/apt/sources.list.d" -type f -name '*.sources' -print)
|
||||
fi
|
||||
if [ -f "/etc/apt/sources.list" ]
|
||||
then
|
||||
APT_SOURCES+=("/etc/apt/sources.list")
|
||||
fi
|
||||
if [ "${#APT_SOURCES[@]}" -gt 0 ]
|
||||
then
|
||||
sed -i -E -e 's!([^ ]+) (http|https)://(archive|security)\.ubuntu\.com/ubuntu[^ ]*(.*)!\1 http://azure.archive.ubuntu.com/ubuntu/\4!' "${APT_SOURCES[@]}"
|
||||
fi
|
||||
apt-get -o Acquire::Retries=$NET_RETRY_COUNT update
|
||||
if [ "$(apt-cache search "^python-is-python3$" | wc -l)" -ne 0 ]
|
||||
then
|
||||
@@ -301,8 +361,6 @@ jobs:
|
||||
fi
|
||||
git config --global pack.threads 0
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install packages
|
||||
if: matrix.install
|
||||
run: |
|
||||
@@ -417,11 +475,25 @@ jobs:
|
||||
then
|
||||
DEPINST_ARGS+=("--git_args" "--jobs $GIT_FETCH_JOBS")
|
||||
fi
|
||||
mkdir -p snapshot
|
||||
cd snapshot
|
||||
echo "Downloading library snapshot: https://github.com/${GITHUB_REPOSITORY}/archive/${GITHUB_SHA}.tar.gz"
|
||||
curl -L --retry "$NET_RETRY_COUNT" -o "${LIBRARY}-${GITHUB_SHA}.tar.gz" "https://github.com/${GITHUB_REPOSITORY}/archive/${GITHUB_SHA}.tar.gz"
|
||||
tar -xf "${LIBRARY}-${GITHUB_SHA}.tar.gz"
|
||||
if [ ! -d "${LIBRARY}-${GITHUB_SHA}" ]
|
||||
then
|
||||
echo "Library snapshot does not contain the library directory ${LIBRARY}-${GITHUB_SHA}:"
|
||||
ls -la
|
||||
exit 1
|
||||
fi
|
||||
rm -f "${LIBRARY}-${GITHUB_SHA}.tar.gz"
|
||||
cd ..
|
||||
git clone -b "$BOOST_BRANCH" --depth 1 "https://github.com/boostorg/boost.git" "boost-root"
|
||||
cd boost-root
|
||||
mkdir -p libs/$LIBRARY
|
||||
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
|
||||
mkdir -p libs
|
||||
rm -rf "libs/$LIBRARY"
|
||||
mv -f "../snapshot/${LIBRARY}-${GITHUB_SHA}" "libs/$LIBRARY"
|
||||
rm -rf "../snapshot"
|
||||
git submodule update --init tools/boostdep
|
||||
DEPINST_ARGS+=("$LIBRARY")
|
||||
python tools/boostdep/depinst/depinst.py "${DEPINST_ARGS[@]}"
|
||||
@@ -443,7 +515,7 @@ jobs:
|
||||
- name: Run tests
|
||||
if: matrix.cmake_tests == ''
|
||||
run: |
|
||||
cd ../boost-root
|
||||
cd boost-root
|
||||
B2_ARGS=("-j" "$BUILD_JOBS" "toolset=${{matrix.toolset}}" "cxxstd=${{matrix.cxxstd}}")
|
||||
if [ -n "${{matrix.build_variant}}" ]
|
||||
then
|
||||
@@ -470,3 +542,70 @@ jobs:
|
||||
fi
|
||||
B2_ARGS+=("libs/$LIBRARY/test")
|
||||
./b2 "${B2_ARGS[@]}"
|
||||
|
||||
windows:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- 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: "11,14,17,20,23"
|
||||
addrmd: 64
|
||||
os: windows-2022
|
||||
|
||||
timeout-minutes: 15
|
||||
runs-on: ${{matrix.os}}
|
||||
|
||||
steps:
|
||||
- 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%
|
||||
mkdir snapshot
|
||||
cd snapshot
|
||||
echo Downloading library snapshot: https://github.com/%GITHUB_REPOSITORY%/archive/%GITHUB_SHA%.zip
|
||||
curl -L --retry %NET_RETRY_COUNT% -o "%LIBRARY%-%GITHUB_SHA%.zip" "https://github.com/%GITHUB_REPOSITORY%/archive/%GITHUB_SHA%.zip"
|
||||
tar -xf "%LIBRARY%-%GITHUB_SHA%.zip"
|
||||
if not exist "%LIBRARY%-%GITHUB_SHA%\" (
|
||||
echo Library snapshot does not contain the library directory %LIBRARY%-%GITHUB_SHA%:
|
||||
dir
|
||||
exit /b 1
|
||||
)
|
||||
del /f "%LIBRARY%-%GITHUB_SHA%.zip"
|
||||
cd ..
|
||||
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||
cd boost-root
|
||||
if not exist "libs\" mkdir libs
|
||||
if exist "libs\%LIBRARY%\" rmdir /s /q "libs\%LIBRARY%"
|
||||
move /Y "..\snapshot\%LIBRARY%-%GITHUB_SHA%" "libs\%LIBRARY%"
|
||||
rmdir /s /q "..\snapshot"
|
||||
git submodule update --init tools/boostdep
|
||||
python tools/boostdep/depinst/depinst.py --git_args "--jobs %GIT_FETCH_JOBS%" %LIBRARY%
|
||||
cmd /c bootstrap
|
||||
b2 -d0 headers
|
||||
|
||||
- name: Run tests
|
||||
shell: cmd
|
||||
run: |
|
||||
cd boost-root
|
||||
if not "${{matrix.cxxstd}}" == "" set CXXSTD=cxxstd=${{matrix.cxxstd}}
|
||||
if not "${{matrix.addrmd}}" == "" set ADDRMD=address-model=${{matrix.addrmd}}
|
||||
if not "${{matrix.build_variant}}" == "" (set BUILD_VARIANT=variant=${{matrix.build_variant}}) else (set BUILD_VARIANT=variant=%DEFAULT_BUILD_VARIANT%)
|
||||
b2 -j %NUMBER_OF_PROCESSORS% libs/%LIBRARY%/test toolset=${{matrix.toolset}} %CXXSTD% %ADDRMD% %BUILD_VARIANT% embed-manifest-via=linker
|
||||
|
@@ -18,8 +18,8 @@ Boost.Utility, part of collection of the [Boost C++ Libraries](https://github.co
|
||||
|
||||
Branch | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
|
||||
:-------------: | -------------- | -------- | ----------- | ------------ |
|
||||
[`master`](https://github.com/boostorg/utility/tree/master) | [](https://github.com/boostorg/utility/actions?query=branch%3Amaster) | [](https://ci.appveyor.com/project/Lastique/utility/branch/master) | [](http://www.boost.org/development/tests/master/developer/utility.html) | [](https://pdimov.github.io/boostdep-report/master/utility.html)
|
||||
[`develop`](https://github.com/boostorg/utility/tree/develop) | [](https://github.com/boostorg/utility/actions?query=branch%3Adevelop) | [](https://ci.appveyor.com/project/Lastique/utility/branch/develop) | [](http://www.boost.org/development/tests/develop/developer/utility.html) | [](https://pdimov.github.io/boostdep-report/develop/utility.html)
|
||||
[`master`](https://github.com/boostorg/utility/tree/master) | [](https://github.com/boostorg/utility/actions?query=branch%3Amaster) | [](https://ci.appveyor.com/project/Lastique/utility/branch/master) | [](https://regression.boost.io/master/developer/utility.html) | [](https://pdimov.github.io/boostdep-report/master/utility.html)
|
||||
[`develop`](https://github.com/boostorg/utility/tree/develop) | [](https://github.com/boostorg/utility/actions?query=branch%3Adevelop) | [](https://ci.appveyor.com/project/Lastique/utility/branch/develop) | [](https://regression.boost.io/develop/developer/utility.html) | [](https://pdimov.github.io/boostdep-report/develop/utility.html)
|
||||
|
||||
### License
|
||||
|
||||
|
17
appveyor.yml
17
appveyor.yml
@@ -15,10 +15,7 @@ branches:
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0
|
||||
ADDRMD: 32
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
- TOOLSET: msvc-12.0,msvc-14.0
|
||||
- TOOLSET: msvc-14.0
|
||||
ADDRMD: 32,64
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
- TOOLSET: msvc-14.1
|
||||
@@ -44,27 +41,27 @@ environment:
|
||||
ENV_SCRIPT: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||
- TOOLSET: gcc
|
||||
CXXSTD: 03,11,14,1z
|
||||
CXXSTD: 11,14,1z
|
||||
ADDPATH: C:\cygwin\bin;
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
- TOOLSET: gcc
|
||||
CXXSTD: 03,11,14,1z
|
||||
CXXSTD: 11,14,1z
|
||||
ADDPATH: C:\cygwin64\bin;
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
- TOOLSET: gcc
|
||||
CXXSTD: 03,11,14,1z
|
||||
CXXSTD: 11,14,1z
|
||||
ADDPATH: C:\mingw\bin;
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
- TOOLSET: gcc
|
||||
CXXSTD: 03,11,14,1z
|
||||
CXXSTD: 11,14,1z
|
||||
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
- TOOLSET: gcc
|
||||
CXXSTD: 03,11,14,17
|
||||
CXXSTD: 11,14,17
|
||||
ADDPATH: C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64\bin;
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
- TOOLSET: gcc
|
||||
CXXSTD: 03,11,14,17,2a
|
||||
CXXSTD: 11,14,17,2a
|
||||
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
|
||||
|
29
build.jam
Normal file
29
build.jam
Normal file
@@ -0,0 +1,29 @@
|
||||
# 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/core//boost_core
|
||||
/boost/io//boost_io
|
||||
/boost/preprocessor//boost_preprocessor
|
||||
/boost/throw_exception//boost_throw_exception
|
||||
/boost/type_traits//boost_type_traits ;
|
||||
|
||||
project /boost/utility
|
||||
: common-requirements
|
||||
<include>include
|
||||
;
|
||||
|
||||
explicit
|
||||
[ alias boost_utility : : : : <library>$(boost_dependencies) ]
|
||||
[ alias all : boost_utility test ]
|
||||
;
|
||||
|
||||
call-if : boost-library utility
|
||||
;
|
||||
|
@@ -6,8 +6,7 @@
|
||||
/]
|
||||
|
||||
[/===============]
|
||||
[#sec:BOOST_BINARY]
|
||||
[section Binary Integer Literals]
|
||||
[section:BOOST_BINARY Binary Integer Literals]
|
||||
[/===============]
|
||||
|
||||
[section Introduction]
|
||||
|
@@ -8,7 +8,7 @@ import quickbook ;
|
||||
|
||||
project boost/libs/utility/doc ;
|
||||
|
||||
path-constant INCLUDES : ../../.. ;
|
||||
path-constant INCLUDES : ../include ;
|
||||
path-constant boost-images : ../../../doc/src/images ;
|
||||
|
||||
# Generate XML doxygen reference for base_from_member component in base_from_member_reference.xml
|
||||
@@ -39,6 +39,7 @@ doxygen base_from_member_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
@@ -83,6 +84,7 @@ doxygen boost_binary_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
@@ -128,6 +130,7 @@ doxygen call_traits_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
@@ -173,6 +176,7 @@ doxygen compressed_pair_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
@@ -218,6 +222,7 @@ doxygen in_place_factory_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
@@ -265,6 +270,7 @@ doxygen result_of_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
@@ -285,6 +291,7 @@ doxygen result_of_reference
|
||||
doxygen string_view_reference
|
||||
:
|
||||
$(INCLUDES)/boost/utility/string_view.hpp
|
||||
$(INCLUDES)/boost/utility/string_ref.hpp
|
||||
:
|
||||
<location>tmp
|
||||
<doxygen:param>ENABLE_PREPROCESSING=YES
|
||||
@@ -309,6 +316,7 @@ doxygen string_view_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
@@ -353,6 +361,7 @@ doxygen value_init_reference
|
||||
BOOST_CONSTEXPR_OR_CONST=constexpr \\
|
||||
BOOST_NOEXCEPT=noexcept \\
|
||||
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_EXPR(x)=noexcept(x) \\
|
||||
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
|
||||
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
|
||||
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
|
||||
|
@@ -7,7 +7,7 @@
|
||||
/]
|
||||
|
||||
[/===============]
|
||||
[section Call Traits]
|
||||
[section:call_traits Call Traits]
|
||||
[/===============]
|
||||
|
||||
[section Introduction]
|
||||
@@ -19,9 +19,9 @@ The template class __call_traits_T__ encapsulates the
|
||||
"best" method to pass a parameter of some type `T` to or
|
||||
from a function, and consists of a collection of `typedef`s defined
|
||||
as in the table below. The purpose of __call_traits__ is to ensure
|
||||
that problems like [link sec:refs "references to references"]
|
||||
that problems like [link utility.utilities.call_traits.examples.refs "references to references"]
|
||||
never occur, and that parameters are passed in the most efficient
|
||||
manner possible, as in the [link sec:examples examples]. In each
|
||||
manner possible, as in the [link utility.utilities.call_traits.examples examples]. In each
|
||||
case, if your existing practice is to use the type defined on the
|
||||
left, then replace it with the __call_traits__ defined type on the
|
||||
right.
|
||||
@@ -100,7 +100,7 @@ used to solve the reference to reference problem.
|
||||
Notes:
|
||||
|
||||
# If `T` is already reference type, then __call_traits__ is
|
||||
defined such that [link sec:refs "references to references"]
|
||||
defined such that [link utility.utilities.call_traits.examples.refs "references to references"]
|
||||
do not occur (requires partial specialization).
|
||||
# If `T` is an array type, then __call_traits__ defines `value_type`
|
||||
as a "constant pointer to type" rather than an
|
||||
@@ -145,8 +145,7 @@ If `T` is an assignable type the following assignments are possible:
|
||||
]
|
||||
[endsect]
|
||||
|
||||
[#sec:examples]
|
||||
[section Examples]
|
||||
[section:examples Examples]
|
||||
|
||||
The following table shows the effect that __call_traits__ has on
|
||||
various types.
|
||||
@@ -204,8 +203,7 @@ struct contained
|
||||
```
|
||||
[endsect]
|
||||
|
||||
[#sec:refs]
|
||||
[section Example 2 (the reference to reference problem):]
|
||||
[section:refs Example 2 (the reference to reference problem):]
|
||||
|
||||
Consider the definition of __std_binder1st__:
|
||||
|
||||
@@ -241,8 +239,7 @@ the no "reference to reference" occurs.
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:example3]
|
||||
[section Example 3 (the `make_pair` problem):]
|
||||
[section:example3 Example 3 (the `make_pair` problem):]
|
||||
|
||||
If we pass the name of an array as one (or both) arguments to `__std_make_pair__`,
|
||||
then template argument deduction deduces the passed parameter as
|
||||
@@ -277,8 +274,7 @@ __std_make_pair__ are not expressed in terms of __call_traits__: doing so
|
||||
would prevent template argument deduction from functioning.
|
||||
[endsect]
|
||||
|
||||
[#sec:example4]
|
||||
[section Example 4 (optimising fill):]
|
||||
[section:example4 Example 4 (optimising fill):]
|
||||
|
||||
The __call_traits__ template will "optimize" the passing
|
||||
of a small built-in type as a function parameter. This mainly has
|
||||
@@ -359,12 +355,12 @@ Small built-in types, what the standard calls [@https://en.cppreference.com/w/cp
|
||||
types], differ from existing practice only in the `param_type`
|
||||
`typedef`. In this case passing `T const` is compatible
|
||||
with existing practice, but may improve performance in some cases
|
||||
(see [link sec:example4 Example 4]). In any case this should never
|
||||
(see [link utility.utilities.call_traits.examples.example4 Example 4]). In any case this should never
|
||||
be any worse than existing practice.
|
||||
|
||||
Pointers follow the same rationale as small built-in types.
|
||||
|
||||
For reference types the rationale follows [link sec:refs Example 2]
|
||||
For reference types the rationale follows [link utility.utilities.call_traits.examples.refs Example 2]
|
||||
- references to references are not allowed, so the __call_traits__
|
||||
members must be defined such that these problems do
|
||||
not occur. There is a proposal to modify the language such that
|
||||
@@ -425,7 +421,7 @@ For `value_type` (return by value), again only a pointer may be
|
||||
returned, not a copy of the whole array, and again __call_traits__
|
||||
makes the degradation explicit. The `value_type` member is useful
|
||||
whenever an array must be explicitly degraded to a pointer -
|
||||
[link sec:example3 Example 3] provides the test case.
|
||||
[link utility.utilities.call_traits.examples.example3 Example 3] provides the test case.
|
||||
|
||||
Footnote: the array specialisation for __call_traits__ is the least
|
||||
well understood of all the __call_traits__ specialisations. If the given
|
||||
|
@@ -8,7 +8,7 @@
|
||||
or copy at http://boost.org/LICENSE_1_0.txt
|
||||
]
|
||||
|
||||
[section Compressed Pair]
|
||||
[section:compressed_pair Compressed Pair]
|
||||
|
||||
[section Introduction]
|
||||
|
||||
|
@@ -7,8 +7,7 @@
|
||||
/]
|
||||
|
||||
[/===============]
|
||||
[#sec:in_place_factory]
|
||||
[section In-place Factory]
|
||||
[section:in_place_factory In-place Factory]
|
||||
[/===============]
|
||||
|
||||
[section Introduction]
|
||||
@@ -256,13 +255,13 @@ struct C
|
||||
~C() { delete contained_ ; }
|
||||
|
||||
template<class InPlaceFactory>
|
||||
void construct ( InPlaceFactory const& aFactory, boost::__in_place_factory_base__* )
|
||||
void construct ( InPlaceFactory const& aFactory, const boost::__in_place_factory_base__* )
|
||||
{
|
||||
aFactory.template apply<X>(contained_);
|
||||
}
|
||||
|
||||
template<class TypedInPlaceFactory>
|
||||
void construct ( TypedInPlaceFactory const& aFactory, boost::__typed_in_place_factory_base__* )
|
||||
void construct ( TypedInPlaceFactory const& aFactory, const boost::__typed_in_place_factory_base__* )
|
||||
{
|
||||
aFactory.apply(contained_);
|
||||
}
|
||||
@@ -296,7 +295,6 @@ void foo()
|
||||
[endsect]
|
||||
|
||||
[/===============]
|
||||
[#boost.typed_in_place_factory_base]
|
||||
[xinclude tmp/in_place_factory_reference.xml]
|
||||
[/===============]
|
||||
|
||||
|
213
doc/main.qbk
213
doc/main.qbk
@@ -57,113 +57,113 @@
|
||||
[/ (Macros are defined here because these macros are often referenced in other components) ]
|
||||
[/ (operators macros link to the a table of operators because there's no doxygen reference for the operators) ]
|
||||
|
||||
[def __BOOST_BINARY__ [link sec:BOOST_BINARY `BOOST_BINARY`]]
|
||||
[def __in_place_factory__ [link sec:in_place_factory `in_place_factory`]]
|
||||
[def __BOOST_BINARY__ [link utility.utilities.BOOST_BINARY `BOOST_BINARY`]]
|
||||
[def __in_place_factory__ [link utility.utilities.in_place_factory `in_place_factory`]]
|
||||
|
||||
[def __boost_base_from_member__ [link boost.base_from_member `boost::base_from_member`]]
|
||||
[def __boost_call_traits__ [link boost.call_traits `boost::call_traits`]]
|
||||
[def __boost_result_of__ [link boost.result_of `boost::result_of`]]
|
||||
[def __boost_tr1_result_of__ [link boost.tr1_result_of `boost::tr1_result_of`]]
|
||||
[def __boost_string_view__ [link boost.basic_string_view `boost::string_view`]]
|
||||
[def __boost_basic_string_view__ [link boost.basic_string_view `boost::basic_string_view`]]
|
||||
[def __boost_base_from_member__ [classref boost::base_from_member `boost::base_from_member`]]
|
||||
[def __boost_call_traits__ [classref boost::call_traits `boost::call_traits`]]
|
||||
[def __boost_result_of__ [classref boost::result_of `boost::result_of`]]
|
||||
[def __boost_tr1_result_of__ [classref boost::tr1_result_of `boost::tr1_result_of`]]
|
||||
[def __boost_string_view__ [classref boost::basic_string_view `boost::string_view`]]
|
||||
[def __boost_basic_string_view__ [classref boost::basic_string_view `boost::basic_string_view`]]
|
||||
|
||||
[def __additive1__ [link sec:arithmetic `additive1`]]
|
||||
[def __additive2__ [link sec:arithmetic `additive2`]]
|
||||
[def __arithmetic1__ [link sec:arithmetic `arithmetic1`]]
|
||||
[def __arithmetic2__ [link sec:arithmetic `arithmetic2`]]
|
||||
[def __base_from_member__ [link boost.base_from_member `base_from_member`]]
|
||||
[def __basic_string_ref__ [link boost.basic_string_view `basic_string_ref`]]
|
||||
[def __basic_string_view__ [link boost.basic_string_view `basic_string_view`]]
|
||||
[def __bidirectional_iteratable__ [link sec:arithmetic `bidirectional_iteratable`]]
|
||||
[def __bidirectional_iterator_helper__ [link sec:arithmetic `bidirectional_iterator_helper`]]
|
||||
[def __bitwise1__ [link sec:arithmetic `bitwise1`]]
|
||||
[def __bitwise2__ [link sec:arithmetic `bitwise2`]]
|
||||
[def __call_traits__ [link boost.call_traits `call_traits`]]
|
||||
[def __call_traits_T__ [link boost.call_traits `call_traits<T>`]]
|
||||
[def __call_traits_lt__T___ [link boost.call_traits `call_traits<T&>`]]
|
||||
[def __call_traits_lt__T_lb_N_rb__gt___ [link boost.call_traits `call_traits< T[N]>`]]
|
||||
[def __call_traits_lt__const_T_lb_N_rb__gt___ [link boost.call_traits `call_traits< const T[N]>`]]
|
||||
[def __compressed_pair__ [link boost.compressed_pair `compressed_pair`]]
|
||||
[def __decrementable__ [link sec:arithmetic `decrementable`]]
|
||||
[def __dereferenceable__ [link sec:arithmetic `dereferenceable`]]
|
||||
[def __equal_pointees__ [link sec:arithmetic `equal_pointees`]]
|
||||
[def __equal_pointees_t__ [link sec:arithmetic `equal_pointees_t`]]
|
||||
[def __equality_comparable1__ [link sec:arithmetic `equality_comparable1`]]
|
||||
[def __equality_comparable2__ [link sec:arithmetic `equality_comparable2`]]
|
||||
[def __equivalent1__ [link sec:arithmetic `equivalent1`]]
|
||||
[def __equivalent2__ [link sec:arithmetic `equivalent2`]]
|
||||
[def __euclidean_ring_operators1__ [link sec:arithmetic `euclidean_ring_operators1`]]
|
||||
[def __euclidean_ring_operators2__ [link sec:arithmetic `euclidean_ring_operators2`]]
|
||||
[def __field_operators1__ [link sec:arithmetic `field_operators1`]]
|
||||
[def __field_operators2__ [link sec:arithmetic `field_operators2`]]
|
||||
[def __forward_iteratable__ [link sec:arithmetic `forward_iteratable`]]
|
||||
[def __forward_iterator_helper__ [link sec:arithmetic `forward_iterator_helper`]]
|
||||
[def __get__ [link boost.get `get`]]
|
||||
[def __hash_range__ [link boost.hash_range `hash_range`]]
|
||||
[def __hash_value__ [link boost.hash_value `hash_value`]]
|
||||
[def __in_place_factory_base__ [link boost.in_place_factory_base `in_place_factory_base`]]
|
||||
[def __incrementable__ [link sec:arithmetic `incrementable`]]
|
||||
[def __indexable__ [link sec:arithmetic `indexable`]]
|
||||
[def __initialized__ [link boost.initialized `initialized`]]
|
||||
[def __initialized_value__ [link boost.initialized_value `initialized_value`]]
|
||||
[def __initialized_value_t__ [link boost.initialized_value_t `initialized_value_t`]]
|
||||
[def __input_iteratable__ [link sec:arithmetic `input_iteratable`]]
|
||||
[def __input_iterator_helper__ [link sec:arithmetic `input_iterator_helper`]]
|
||||
[def __integer_arithmetic1__ [link sec:arithmetic `integer_arithmetic1`]]
|
||||
[def __integer_arithmetic2__ [link sec:arithmetic `integer_arithmetic2`]]
|
||||
[def __integer_multiplicative1__ [link sec:arithmetic `integer_multiplicative1`]]
|
||||
[def __integer_multiplicative2__ [link sec:arithmetic `integer_multiplicative2`]]
|
||||
[def __is_chained_base__ [link sec:arithmetic `is_chained_base`]]
|
||||
[def __less_pointees__ [link boost.less_pointees `less_pointees`]]
|
||||
[def __less_pointees_t__ [link boost.less_pointees_t `less_pointees_t`]]
|
||||
[def __less_than_comparable1__ [link sec:arithmetic `less_than_comparable1`]]
|
||||
[def __less_than_comparable2__ [link sec:arithmetic `less_than_comparable2`]]
|
||||
[def __multiplicative1__ [link sec:arithmetic `multiplicative1`]]
|
||||
[def __multiplicative2__ [link sec:arithmetic `multiplicative2`]]
|
||||
[def __operator_eq__eq__ [link sec:arithmetic `operator==`]]
|
||||
[def __operator_gt__ [link sec:arithmetic `operator_gt_`]]
|
||||
[def __operator_gt__eq__ [link sec:arithmetic `operator>`]]
|
||||
[def __operator_lt__ [link sec:arithmetic `operator<`]]
|
||||
[def __operator_lt__eq__ [link sec:arithmetic `operator<=`]]
|
||||
[def __operator_lt__lt__ [link sec:arithmetic `operator<<`]]
|
||||
[def __operator_not__eq__ [link sec:arithmetic `operator!=`]]
|
||||
[def __operators2__ [link sec:arithmetic `operators2`]]
|
||||
[def __operators__ [link sec:arithmetic `operators`]]
|
||||
[def __operators_lt_T__ [link sec:arithmetic `operators<T,T>`]]
|
||||
[def __ordered_euclidean_ring_operators1__ [link sec:arithmetic `ordered_euclidean_ring_operators1`]]
|
||||
[def __ordered_euclidean_ring_operators2__ [link sec:arithmetic `ordered_euclidean_ring_operators2`]]
|
||||
[def __ordered_euclidian_ring_operators1__ [link sec:arithmetic `ordered_euclidian_ring_operators1`]]
|
||||
[def __ordered_euclidian_ring_operators2__ [link sec:arithmetic `ordered_euclidian_ring_operators2`]]
|
||||
[def __ordered_field_operators1__ [link sec:arithmetic `ordered_field_operators1`]]
|
||||
[def __ordered_field_operators2__ [link sec:arithmetic `ordered_field_operators2`]]
|
||||
[def __ordered_ring_operators1__ [link sec:arithmetic `ordered_ring_operators1`]]
|
||||
[def __ordered_ring_operators2__ [link sec:arithmetic `ordered_ring_operators2`]]
|
||||
[def __output_iteratable__ [link sec:arithmetic `output_iteratable`]]
|
||||
[def __output_iterator_helper__ [link sec:arithmetic `output_iterator_helper`]]
|
||||
[def __partially_ordered1__ [link sec:arithmetic `partially_ordered1`]]
|
||||
[def __partially_ordered2__ [link sec:arithmetic `partially_ordered2`]]
|
||||
[def __random_access_iteratable__ [link sec:arithmetic `random_access_iteratable`]]
|
||||
[def __random_access_iterator_helper__ [link sec:arithmetic `random_access_iterator_helper`]]
|
||||
[def __result_of__ [link boost.result_of `result_of`]]
|
||||
[def __ring_operators1__ [link sec:arithmetic `ring_operators1`]]
|
||||
[def __ring_operators2__ [link sec:arithmetic `ring_operators2`]]
|
||||
[def __shiftable1__ [link sec:arithmetic `shiftable1`]]
|
||||
[def __shiftable2__ [link sec:arithmetic `shiftable2`]]
|
||||
[def __string_ref__ [link boost.basic_string_view `string_ref`]]
|
||||
[def __string_view__ [link boost.basic_string_view `string_view`]]
|
||||
[def __swap__ [link sec:arithmetic `swap`]]
|
||||
[def __totally_ordered1__ [link sec:arithmetic `totally_ordered1`]]
|
||||
[def __totally_ordered2__ [link sec:arithmetic `totally_ordered2`]]
|
||||
[def __tr1_result_of__ [link boost.tr1_result_of `tr1_result_of`]]
|
||||
[def __typed_in_place_factory_base__ [link boost.typed_in_place_factory_base `typed_in_place_factory_base`]]
|
||||
[def __u16string_ref__ [link boost.basic_string_view `u16string_ref`]]
|
||||
[def __u16string_view__ [link boost.basic_string_view `u16string_view`]]
|
||||
[def __u32string_ref__ [link boost.basic_string_view `u32string_ref`]]
|
||||
[def __u32string_view__ [link boost.basic_string_view `u32string_view`]]
|
||||
[def __unit_steppable__ [link sec:arithmetic `unit_steppable`]]
|
||||
[def __value_initialized__ [link boost.value_initialized `value_initialized`]]
|
||||
[def __wstring_ref__ [link boost.basic_string_view `wstring_ref`]]
|
||||
[def __wstring_view__ [link boost.basic_string_view `wstring_view`]]
|
||||
[def __additive1__ [link utility.utilities.operators.arithmetic `additive1`]]
|
||||
[def __additive2__ [link utility.utilities.operators.arithmetic `additive2`]]
|
||||
[def __arithmetic1__ [link utility.utilities.operators.arithmetic `arithmetic1`]]
|
||||
[def __arithmetic2__ [link utility.utilities.operators.arithmetic `arithmetic2`]]
|
||||
[def __base_from_member__ [classref boost::base_from_member `base_from_member`]]
|
||||
[def __basic_string_ref__ [classref boost::basic_string_ref `basic_string_ref`]]
|
||||
[def __basic_string_view__ [classref boost::basic_string_view `basic_string_view`]]
|
||||
[def __bidirectional_iteratable__ [link utility.utilities.operators.arithmetic `bidirectional_iteratable`]]
|
||||
[def __bidirectional_iterator_helper__ [link utility.utilities.operators.arithmetic `bidirectional_iterator_helper`]]
|
||||
[def __bitwise1__ [link utility.utilities.operators.arithmetic `bitwise1`]]
|
||||
[def __bitwise2__ [link utility.utilities.operators.arithmetic `bitwise2`]]
|
||||
[def __call_traits__ [classref boost::call_traits `call_traits`]]
|
||||
[def __call_traits_T__ [classref boost::call_traits `call_traits<T>`]]
|
||||
[def __call_traits_lt__T___ [classref boost::call_traits `call_traits<T&>`]]
|
||||
[def __call_traits_lt__T_lb_N_rb__gt___ [classref boost::call_traits `call_traits< T[N]>`]]
|
||||
[def __call_traits_lt__const_T_lb_N_rb__gt___ [classref boost::call_traits `call_traits< const T[N]>`]]
|
||||
[def __compressed_pair__ [classref boost::compressed_pair `compressed_pair`]]
|
||||
[def __decrementable__ [link utility.utilities.operators.arithmetic `decrementable`]]
|
||||
[def __dereferenceable__ [link utility.utilities.operators.arithmetic `dereferenceable`]]
|
||||
[def __equal_pointees__ [link utility.utilities.operators.arithmetic `equal_pointees`]]
|
||||
[def __equal_pointees_t__ [link utility.utilities.operators.arithmetic `equal_pointees_t`]]
|
||||
[def __equality_comparable1__ [link utility.utilities.operators.arithmetic `equality_comparable1`]]
|
||||
[def __equality_comparable2__ [link utility.utilities.operators.arithmetic `equality_comparable2`]]
|
||||
[def __equivalent1__ [link utility.utilities.operators.arithmetic `equivalent1`]]
|
||||
[def __equivalent2__ [link utility.utilities.operators.arithmetic `equivalent2`]]
|
||||
[def __euclidean_ring_operators1__ [link utility.utilities.operators.arithmetic `euclidean_ring_operators1`]]
|
||||
[def __euclidean_ring_operators2__ [link utility.utilities.operators.arithmetic `euclidean_ring_operators2`]]
|
||||
[def __field_operators1__ [link utility.utilities.operators.arithmetic `field_operators1`]]
|
||||
[def __field_operators2__ [link utility.utilities.operators.arithmetic `field_operators2`]]
|
||||
[def __forward_iteratable__ [link utility.utilities.operators.arithmetic `forward_iteratable`]]
|
||||
[def __forward_iterator_helper__ [link utility.utilities.operators.arithmetic `forward_iterator_helper`]]
|
||||
[def __get__ [funcref boost::get `get`]]
|
||||
[def __hash_range__ [funcref boost::hash_range `hash_range`]]
|
||||
[def __hash_value__ [funcref boost::hash_value `hash_value`]]
|
||||
[def __in_place_factory_base__ [classref boost::in_place_factory_base `in_place_factory_base`]]
|
||||
[def __incrementable__ [link utility.utilities.operators.arithmetic `incrementable`]]
|
||||
[def __indexable__ [link utility.utilities.operators.arithmetic `indexable`]]
|
||||
[def __initialized__ [classref boost::initialized `initialized`]]
|
||||
[def __initialized_value__ [globalref boost::initialized_value `initialized_value`]]
|
||||
[def __initialized_value_t__ [classref boost::initialized_value_t `initialized_value_t`]]
|
||||
[def __input_iteratable__ [link utility.utilities.operators.arithmetic `input_iteratable`]]
|
||||
[def __input_iterator_helper__ [link utility.utilities.operators.arithmetic `input_iterator_helper`]]
|
||||
[def __integer_arithmetic1__ [link utility.utilities.operators.arithmetic `integer_arithmetic1`]]
|
||||
[def __integer_arithmetic2__ [link utility.utilities.operators.arithmetic `integer_arithmetic2`]]
|
||||
[def __integer_multiplicative1__ [link utility.utilities.operators.arithmetic `integer_multiplicative1`]]
|
||||
[def __integer_multiplicative2__ [link utility.utilities.operators.arithmetic `integer_multiplicative2`]]
|
||||
[def __is_chained_base__ [link utility.utilities.operators.arithmetic `is_chained_base`]]
|
||||
[def __less_pointees__ [funcref boost::less_pointees `less_pointees`]]
|
||||
[def __less_pointees_t__ [class boost::less_pointees_t `less_pointees_t`]]
|
||||
[def __less_than_comparable1__ [link utility.utilities.operators.arithmetic `less_than_comparable1`]]
|
||||
[def __less_than_comparable2__ [link utility.utilities.operators.arithmetic `less_than_comparable2`]]
|
||||
[def __multiplicative1__ [link utility.utilities.operators.arithmetic `multiplicative1`]]
|
||||
[def __multiplicative2__ [link utility.utilities.operators.arithmetic `multiplicative2`]]
|
||||
[def __operator_eq__eq__ [link utility.utilities.operators.arithmetic `operator==`]]
|
||||
[def __operator_gt__ [link utility.utilities.operators.arithmetic `operator_gt_`]]
|
||||
[def __operator_gt__eq__ [link utility.utilities.operators.arithmetic `operator>`]]
|
||||
[def __operator_lt__ [link utility.utilities.operators.arithmetic `operator<`]]
|
||||
[def __operator_lt__eq__ [link utility.utilities.operators.arithmetic `operator<=`]]
|
||||
[def __operator_lt__lt__ [link utility.utilities.operators.arithmetic `operator<<`]]
|
||||
[def __operator_not__eq__ [link utility.utilities.operators.arithmetic `operator!=`]]
|
||||
[def __operators2__ [link utility.utilities.operators.arithmetic `operators2`]]
|
||||
[def __operators__ [link utility.utilities.operators.arithmetic `operators`]]
|
||||
[def __operators_lt_T__ [link utility.utilities.operators.arithmetic `operators<T,T>`]]
|
||||
[def __ordered_euclidean_ring_operators1__ [link utility.utilities.operators.arithmetic `ordered_euclidean_ring_operators1`]]
|
||||
[def __ordered_euclidean_ring_operators2__ [link utility.utilities.operators.arithmetic `ordered_euclidean_ring_operators2`]]
|
||||
[def __ordered_euclidian_ring_operators1__ [link utility.utilities.operators.arithmetic `ordered_euclidian_ring_operators1`]]
|
||||
[def __ordered_euclidian_ring_operators2__ [link utility.utilities.operators.arithmetic `ordered_euclidian_ring_operators2`]]
|
||||
[def __ordered_field_operators1__ [link utility.utilities.operators.arithmetic `ordered_field_operators1`]]
|
||||
[def __ordered_field_operators2__ [link utility.utilities.operators.arithmetic `ordered_field_operators2`]]
|
||||
[def __ordered_ring_operators1__ [link utility.utilities.operators.arithmetic `ordered_ring_operators1`]]
|
||||
[def __ordered_ring_operators2__ [link utility.utilities.operators.arithmetic `ordered_ring_operators2`]]
|
||||
[def __output_iteratable__ [link utility.utilities.operators.arithmetic `output_iteratable`]]
|
||||
[def __output_iterator_helper__ [link utility.utilities.operators.arithmetic `output_iterator_helper`]]
|
||||
[def __partially_ordered1__ [link utility.utilities.operators.arithmetic `partially_ordered1`]]
|
||||
[def __partially_ordered2__ [link utility.utilities.operators.arithmetic `partially_ordered2`]]
|
||||
[def __random_access_iteratable__ [link utility.utilities.operators.arithmetic `random_access_iteratable`]]
|
||||
[def __random_access_iterator_helper__ [link utility.utilities.operators.arithmetic `random_access_iterator_helper`]]
|
||||
[def __result_of__ [classref boost::result_of `result_of`]]
|
||||
[def __ring_operators1__ [link utility.utilities.operators.arithmetic `ring_operators1`]]
|
||||
[def __ring_operators2__ [link utility.utilities.operators.arithmetic `ring_operators2`]]
|
||||
[def __shiftable1__ [link utility.utilities.operators.arithmetic `shiftable1`]]
|
||||
[def __shiftable2__ [link utility.utilities.operators.arithmetic `shiftable2`]]
|
||||
[def __string_ref__ [classref boost::basic_string_ref `string_ref`]]
|
||||
[def __string_view__ [classref boost::basic_string_view `string_view`]]
|
||||
[def __swap__ [link utility.utilities.operators.arithmetic `swap`]]
|
||||
[def __totally_ordered1__ [link utility.utilities.operators.arithmetic `totally_ordered1`]]
|
||||
[def __totally_ordered2__ [link utility.utilities.operators.arithmetic `totally_ordered2`]]
|
||||
[def __tr1_result_of__ [classref boost::tr1_result_of `tr1_result_of`]]
|
||||
[def __typed_in_place_factory_base__ [classref boost::typed_in_place_factory_base `typed_in_place_factory_base`]]
|
||||
[def __u16string_ref__ [classref boost::basic_string_ref `u16string_ref`]]
|
||||
[def __u16string_view__ [classref boost::basic_string_view `u16string_view`]]
|
||||
[def __u32string_ref__ [classref boost::basic_string_ref `u32string_ref`]]
|
||||
[def __u32string_view__ [classref boost::basic_string_view `u32string_view`]]
|
||||
[def __unit_steppable__ [link utility.utilities.operators.arithmetic `unit_steppable`]]
|
||||
[def __value_initialized__ [classref boost::value_initialized `value_initialized`]]
|
||||
[def __wstring_ref__ [classref boost::basic_string_ref `wstring_ref`]]
|
||||
[def __wstring_view__ [classref boost::basic_string_view `wstring_view`]]
|
||||
|
||||
[/ std:: types ]
|
||||
|
||||
@@ -219,8 +219,7 @@
|
||||
|
||||
[include other.qbk]
|
||||
|
||||
[#sec:reference]
|
||||
[section:ref Quick Reference]
|
||||
[section:reference Quick Reference]
|
||||
|
||||
[/ Reference table ]
|
||||
[xinclude quickref.xml]
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
Official repository: https://github.com/boostorg/utility
|
||||
]
|
||||
|
||||
[section:utilities More Utilities]
|
||||
[section:more_utilities More Utilities]
|
||||
|
||||
Some utilities have been moved from Boost.Utilities to more appropriate Boost libraries:
|
||||
|
||||
|
@@ -20,14 +20,14 @@ Over time,
|
||||
When the component has moved to another Boost library, Boost.Utility headers still lead to the appropriate headers
|
||||
in other libraries.
|
||||
|
||||
[table:id Components
|
||||
[table Components
|
||||
[[Boost.Utility] [Moved to Boost] [C++ Standard variant]]
|
||||
[[[@boost:/libs/core/doc/html/core/addressof.html `addressof`]] [[@boost:/libs/core/index.html Boost.Core]] [C++11 __std_addressof__]]
|
||||
[[__base_from_member__] [] []]
|
||||
[[[link utility.utilities.base_from_member `base_from_member`]] [] []]
|
||||
[[__BOOST_BINARY__] [] [C++14 [@https://en.cppreference.com/w/cpp/language/integer_literal Binary integer literal]]]
|
||||
[[__call_traits__] [] []]
|
||||
[[[link utility.utilities.call_traits `call_traits`]] [] []]
|
||||
[[[@boost:/libs/core/doc/html/core/checked_delete.html `checked_delete`]] [[@boost:/libs/core/index.html Boost.Core]] []]
|
||||
[[__compressed_pair__] [] []]
|
||||
[[[link utility.utilities.compressed_pair `compressed_pair`]] [] []]
|
||||
[[[@boost:/libs/type_traits/doc/html/boost_typetraits/reference/declval.html `declval`]] [[@boost:/libs/type_traits/index.html Boost.TypeTraits]] [C++11 __std_declval__]]
|
||||
[[[@boost:/libs/core/doc/html/core/enable_if.html `enable_if`]] [[@boost:/libs/core/index.html Boost.Core]] [C++11 __std_enable_if__]]
|
||||
[[[@boost:/libs/iterator/doc/generator_iterator.htm generator iterator adaptors]] [[@boost:/libs/iterator/index.html Boost.Iterator]] []]
|
||||
@@ -35,12 +35,12 @@ in other libraries.
|
||||
[[[@boost:/libs/iterator/index.html `iterator_adaptors`]] [[@boost:/libs/iterator/index.html Boost.Iterator]] []]
|
||||
[[[@boost:/libs/iterator/doc/html/iterator/algorithms/next_prior.html `next` / `prior`]] [[@boost:/libs/iterator/index.html Boost.Iterator]] [C++11 __std_next__ / __std_prev__]]
|
||||
[[[@boost:/libs/core/doc/html/core/noncopyable.html `noncopyable`]] [[@boost:/libs/core/index.html Boost.Core]] []]
|
||||
[[[link sec:operators `operators`]] [] []]
|
||||
[[[link utility.utilities.operators `operators`]] [] []]
|
||||
[[[@boost:/libs/io/doc/html/io.html `ostream_string`]] [[@boost:/libs/io/index.html Boost.IO]] []]
|
||||
[[__result_of__] [] [C++11 __std_result_of__]]
|
||||
[[__string_view__] [] [C++17 __std_string_view__]]
|
||||
[[[link utility.utilities.result_of `result_of`]] [] [C++11 __std_result_of__]]
|
||||
[[[link utility.utilities.string_view `string_view`]] [] [C++17 __std_string_view__]]
|
||||
[[[@boost:/libs/throw_exception/doc/html/throw_exception.html#using_boost_throw_exception `throw_exception`]] [[@boost:/libs/throw_exception/index.html Boost.ThrowException]] []]
|
||||
[[[link sec:value_init `value_init`]] [] [C++11 [@https://en.cppreference.com/w/cpp/language/list_initialization List initialization]]]
|
||||
[[[link utility.utilities.value_init `value_init`]] [] [C++11 [@https://en.cppreference.com/w/cpp/language/list_initialization List initialization]]]
|
||||
]
|
||||
|
||||
[endsect]
|
||||
|
261
doc/quickref.xml
261
doc/quickref.xml
@@ -43,7 +43,7 @@
|
||||
<bridgehead renderas="sect3">Classes</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.base_from_member">base_from_member</link>
|
||||
<classname alt="boost::base_from_member">base_from_member</classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -53,19 +53,16 @@
|
||||
<bridgehead renderas="sect3">Type Traits</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.call_traits">call_traits</link>
|
||||
<classname alt="boost::call_traits">call_traits</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.call_traits">call_traits<T&></link>
|
||||
<classname alt="boost::call_traits">call_traits<T&></classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.call_traits">call_traits<T[N]>
|
||||
</link>
|
||||
<classname alt="boost::call_traits">call_traits<T[N]></classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.call_traits">call_traits<const
|
||||
T[N]>
|
||||
</link>
|
||||
<classname alt="boost::call_traits">call_traits<const T[N]></classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -75,14 +72,14 @@
|
||||
<bridgehead renderas="sect3">Classes</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.compressed_pair">compressed_pair</link>
|
||||
<classname alt="boost::compressed_pair">compressed_pair</classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
|
||||
<bridgehead renderas="sect3">Functions</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="header.boost.detail.compressed_pair_hpp">swap</link>
|
||||
<headername alt="boost/detail/compressed_pair.hpp">swap</headername>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -92,11 +89,10 @@
|
||||
<bridgehead renderas="sect3">Classes</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.in_place_factory_base">in_place_factory_base</link>
|
||||
<classname alt="boost::in_place_factory_base">in_place_factory_base</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.typed_in_place_factory_base">typed_in_place_factory_base
|
||||
</link>
|
||||
<classname alt="boost::typed_in_place_factory_base">typed_in_place_factory_base</classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -126,45 +122,45 @@
|
||||
<bridgehead renderas="sect3">Classes (1 of 5)</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">additive1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.additive1">additive1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">additive2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.additive2">additive2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">arithmetic1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.arithmetic1">arithmetic1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">arithmetic2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.arithmetic2">arithmetic2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">bidirectional_iteratable</link>
|
||||
<link linkend="utility.utilities.operators.deref.grpd_iter_oprs.bidirectional_iteratable">bidirectional_iteratable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">
|
||||
<link linkend="utility.utilities.operators.deref.iterator.bidirectional_iterator_helper">
|
||||
bidirectional_iterator_helper
|
||||
</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">bitwise1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.bitwise1">bitwise1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">bitwise2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.bitwise2">bitwise2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">decrementable</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.decrementable">decrementable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">dereferenceable</link>
|
||||
<link linkend="utility.utilities.operators.deref.dereference.dereferenceable">dereferenceable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">equality_comparable1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.equality_comparable1">equality_comparable1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">equality_comparable2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.equality_comparable2">equality_comparable2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">equivalent1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.equivalent1">equivalent1</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -173,45 +169,45 @@
|
||||
<bridgehead renderas="sect3">Classes (2 of 5)</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">equivalent2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.equivalent2">equivalent2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">euclidean_ring_operators1
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.euclidean_ring_operators1">euclidean_ring_operators1
|
||||
</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">euclidean_ring_operators2
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.euclidean_ring_operators2">euclidean_ring_operators2
|
||||
</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">field_operators1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.field_operators1">field_operators1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">field_operators2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.field_operators2">field_operators2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">forward_iteratable</link>
|
||||
<link linkend="utility.utilities.operators.deref.grpd_iter_oprs.forward_iteratable">forward_iteratable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">forward_iterator_helper</link>
|
||||
<link linkend="utility.utilities.operators.deref.iterator.forward_iterator_helper">forward_iterator_helper</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">incrementable</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.incrementable">incrementable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">indexable</link>
|
||||
<link linkend="utility.utilities.operators.deref.dereference.indexable">indexable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">input_iteratable</link>
|
||||
<link linkend="utility.utilities.operators.deref.grpd_iter_oprs.input_iteratable">input_iteratable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">input_iterator_helper</link>
|
||||
<link linkend="utility.utilities.operators.deref.iterator.input_iterator_helper">input_iterator_helper</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">integer_arithmetic1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.integer_arithmetic1">integer_arithmetic1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">integer_arithmetic2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.integer_arithmetic2">integer_arithmetic2</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -220,49 +216,47 @@
|
||||
<bridgehead renderas="sect3">Classes (3 of 5)</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">integer_multiplicative1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.integer_multiplicative1">integer_multiplicative1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">integer_multiplicative2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.integer_multiplicative2">integer_multiplicative2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">is_chained_base</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.less_than_comparable1">less_than_comparable1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">less_than_comparable1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.less_than_comparable2">less_than_comparable2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">less_than_comparable2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.multiplicative1">multiplicative1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">multiplicative1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.multiplicative2">multiplicative2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">multiplicative2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.ex_oprs.operators1">operators1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">operators</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.ex_oprs.operators2">operators2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">operators2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.ex_oprs.operators2">operators<T,T></link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">operators<T,T></link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ordered_euclidean_ring_operators1">
|
||||
ordered_euclidean_ring_operators1
|
||||
</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ordered_euclidean_ring_operators2">
|
||||
ordered_euclidean_ring_operators2
|
||||
</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">
|
||||
ordered_euclidian_ring_operators1
|
||||
</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ordered_field_operators1">ordered_field_operators1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ordered_field_operators2">ordered_field_operators2</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -271,47 +265,45 @@
|
||||
<bridgehead renderas="sect3">Classes (4 of 5)</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">
|
||||
ordered_euclidian_ring_operators2
|
||||
</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ordered_ring_operators1">ordered_ring_operators1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">ordered_field_operators1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ordered_ring_operators2">ordered_ring_operators2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">ordered_field_operators2</link>
|
||||
<link linkend="utility.utilities.operators.deref.grpd_iter_oprs.output_iteratable">output_iteratable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">ordered_ring_operators1</link>
|
||||
<link linkend="utility.utilities.operators.deref.iterator.output_iterator_helper">output_iterator_helper</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">ordered_ring_operators2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.partially_ordered1">partially_ordered1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">output_iteratable</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.smpl_oprs.partially_ordered2">partially_ordered2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">output_iterator_helper</link>
|
||||
<link linkend="utility.utilities.operators.deref.grpd_iter_oprs.random_access_iteratable">random_access_iteratable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">partially_ordered1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">partially_ordered2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">random_access_iteratable</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">
|
||||
<link linkend="utility.utilities.operators.deref.iterator.random_access_iterator_helper">
|
||||
random_access_iterator_helper
|
||||
</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">ring_operators1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ring_operators1">ring_operators1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">ring_operators2</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.ring_operators2">ring_operators2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.shiftable1">shiftable1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.shiftable2">shiftable2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.totally_ordered1">totally_ordered1</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -320,25 +312,10 @@
|
||||
<bridgehead renderas="sect3">Classes (5 of 5)</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">shiftable1</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.totally_ordered2">totally_ordered2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">shiftable2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">totally_ordered1</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">totally_ordered2</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">unit_steppable</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
<bridgehead renderas="sect3">Type Traits</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="sec:arithmetic">is_chained_base</link>
|
||||
<link linkend="utility.utilities.operators.arithmetic.grpd_oprs.unit_steppable">unit_steppable</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -374,10 +351,10 @@
|
||||
<bridgehead renderas="sect3">Type Traits</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.result_of">result_of</link>
|
||||
<classname alt="boost::result_of">result_of</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.tr1_result_of">tr1_result_of</link>
|
||||
<classname alt="boost::tr1_result_of">tr1_result_of</classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -387,28 +364,28 @@
|
||||
<bridgehead renderas="sect3">Aliases</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">string_view</link>
|
||||
<classname alt="boost::basic_string_view">string_view</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">u16string_ref</link>
|
||||
<classname alt="boost::basic_string_ref">u16string_ref</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">u16string_view</link>
|
||||
<classname alt="boost::basic_string_view">u16string_view</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">u32string_ref</link>
|
||||
<classname alt="boost::basic_string_ref">u32string_ref</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">u32string_view</link>
|
||||
<classname alt="boost::basic_string_view">u32string_view</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">wstring_ref</link>
|
||||
<classname alt="boost::basic_string_ref">wstring_ref</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">wstring_view</link>
|
||||
<classname alt="boost::basic_string_view">wstring_view</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">string_ref</link>
|
||||
<classname alt="boost::basic_string_ref">string_ref</classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -417,19 +394,19 @@
|
||||
<bridgehead renderas="sect3">Classes</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">basic_string_ref</link>
|
||||
<classname alt="boost::basic_string_ref">basic_string_ref</classname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.basic_string_view">basic_string_view</link>
|
||||
<classname alt="boost::basic_string_view">basic_string_view</classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
<bridgehead renderas="sect3">Functions</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.hash_range">hash_range</link>
|
||||
<functionname alt="boost::hash_range">hash_range</functionname>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.hash_value">hash_value</link>
|
||||
<functionname alt="boost::hash_value">hash_value</functionname>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
@@ -438,58 +415,58 @@
|
||||
<bridgehead renderas="sect3">Operators</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="header.boost.utility.string_view_hpp">operator==</link>
|
||||
<headername alt="boost/utility/string_view.hpp">operator==</headername>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="header.boost.utility.string_view_hpp">operator!=</link>
|
||||
<headername alt="boost/utility/string_view.hpp">operator!=</headername>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="header.boost.utility.string_view_hpp">operator<</link>
|
||||
<headername alt="boost/utility/string_view.hpp">operator<</headername>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="header.boost.utility.string_view_hpp">operator<=</link>
|
||||
<headername alt="boost/utility/string_view.hpp">operator<=</headername>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="header.boost.utility.string_view_hpp">operator></link>
|
||||
<headername alt="boost/utility/string_view.hpp">operator></headername>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="header.boost.utility.string_view_hpp">operator>=</link>
|
||||
<headername alt="boost/utility/string_view.hpp">operator>=</headername>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="header.boost.utility.string_view_hpp">operator<<</link>
|
||||
<headername alt="boost/utility/string_view.hpp">operator<<</headername>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
|
||||
<!-- value_init -->
|
||||
<entry valign="top">
|
||||
<bridgehead renderas="sect3">Classes</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.initialized">initialized</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.initialized_value_t">initialized_value_t</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="boost.value_initialized">value_initialized</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
<bridgehead renderas="sect3">Functions</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="header.boost.utility.value_init_hpp">get</link>
|
||||
</member>
|
||||
<member>
|
||||
<link linkend="header.boost.utility.value_init_hpp">swap</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
<bridgehead renderas="sect3">Constants</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<link linkend="boost.initialized_value">initialized_value</link>
|
||||
</member>
|
||||
</simplelist>
|
||||
<bridgehead renderas="sect3">Classes</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<classname alt="boost::initialized">initialized</classname>
|
||||
</member>
|
||||
<member>
|
||||
<classname alt="boost::initialized_value_t">initialized_value_t</classname>
|
||||
</member>
|
||||
<member>
|
||||
<classname alt="boost::value_initialized">value_initialized</classname>
|
||||
</member>
|
||||
</simplelist>
|
||||
<bridgehead renderas="sect3">Functions</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<headername alt="boost/utility/value_init.hpp">get</headername>
|
||||
</member>
|
||||
<member>
|
||||
<headername alt="boost/utility/value_init.hpp">swap</headername>
|
||||
</member>
|
||||
</simplelist>
|
||||
<bridgehead renderas="sect3">Constants</bridgehead>
|
||||
<simplelist type="vert" columns="1">
|
||||
<member>
|
||||
<globalname alt="boost::initialized_value">initialized_value</globalname>
|
||||
</member>
|
||||
</simplelist>
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
/]
|
||||
|
||||
[/===============]
|
||||
[section Result of]
|
||||
[section:result_of Result of]
|
||||
[/===============]
|
||||
|
||||
[section Introduction]
|
||||
@@ -122,7 +122,7 @@ and is not implemented by some compilers.
|
||||
the actual result type deduced by __decltype__, then using TR1 with a __decltype__ fallback
|
||||
will allow you to work with both your existing TR1 function objects and new C++11
|
||||
function object. This situation could occur if your legacy function objects
|
||||
misused the TR1 protocol. See the documentation on known [link sec:result_of_tr1_diff differences]
|
||||
misused the TR1 protocol. See the documentation on known [link utility.utilities.result_of.result_of_tr1_diff differences]
|
||||
between __boost_result_of__ and TR1.
|
||||
|
||||
* [#BOOST_NO_RESULT_OF] This implementation of __result_of__ requires class template
|
||||
@@ -138,8 +138,7 @@ or, for motivation and design rationale, the __result_of__
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:result_of_guidelines]
|
||||
[section Usage guidelines for __boost_result_of__]
|
||||
[section:result_of_guidelines Usage guidelines for __boost_result_of__]
|
||||
|
||||
The following are general suggestions about when and how to use __boost_result_of__.
|
||||
|
||||
@@ -151,7 +150,7 @@ there's no reason to stop using it.
|
||||
# If you are targeting C++11 but may port your code to legacy compilers
|
||||
at some time in the future, then use __boost_result_of__ with __decltype__.
|
||||
When __decltype__ is used __boost_result_of__ and `__std_result_of__` are usually
|
||||
interchangeable. See the documentation on known [link sec:result_of_cxx11_diff differences]
|
||||
interchangeable. See the documentation on known [link utility.utilities.result_of.result_of_cxx11_diff differences]
|
||||
between __boost_result_of__ and C++11 __std_result_of__.
|
||||
|
||||
# If compiler portability is required, use __boost_result_of__ with the TR1 protocol
|
||||
@@ -195,8 +194,7 @@ typedef __boost_result_of__<
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:result_of_tr1_protocol_guidelines]
|
||||
[section Usage guidelines for the TR1 result_of protocol]
|
||||
[section:result_of_tr1_protocol_guidelines Usage guidelines for the TR1 result_of protocol]
|
||||
|
||||
On compliant C++11 compilers, __boost_result_of__ can
|
||||
use __decltype__ to deduce the type of any
|
||||
@@ -212,7 +210,7 @@ argument types or the cv-qualification of the
|
||||
function object, simply
|
||||
define `result_type`. There is no need
|
||||
to use the `result` template unless the
|
||||
return type varies.</li>
|
||||
return type varies.
|
||||
|
||||
* Use the protocol specified type when defining
|
||||
function prototypes. This can help ensure the
|
||||
@@ -274,8 +272,7 @@ struct functor {
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:result_of_tr1_diff]
|
||||
[section Known differences between __boost_result_of__ and __boost_tr1_result_of__]
|
||||
[section:result_of_tr1_diff Known differences between __boost_result_of__ and __boost_tr1_result_of__]
|
||||
|
||||
When using __decltype__, __boost_result_of__ ignores the TR1 protocol and instead deduces the
|
||||
return type of function objects directly via __decltype__. In most situations, users
|
||||
@@ -399,8 +396,7 @@ BOOST_STATIC_ASSERT((
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:result_of_cxx11_diff]
|
||||
[section Known differences between __boost_result_of__ and C++11 result_of]
|
||||
[section:result_of_cxx11_diff Known differences between __boost_result_of__ and C++11 result_of]
|
||||
|
||||
When using __decltype__, __boost_result_of__ implements most of the C++11 __std_result_of__
|
||||
specification. One known exception is that __boost_result_of__ does not implement the
|
||||
|
@@ -7,7 +7,7 @@
|
||||
/]
|
||||
|
||||
[/===============]
|
||||
[section String View]
|
||||
[section:string_view String View]
|
||||
[/===============]
|
||||
|
||||
[section Introduction]
|
||||
|
@@ -7,9 +7,7 @@
|
||||
/]
|
||||
|
||||
[/===============]
|
||||
[#sec:value_init]
|
||||
[section Value Init]
|
||||
|
||||
[section:value_init Value Init]
|
||||
[/===============]
|
||||
|
||||
[section Introduction]
|
||||
@@ -61,7 +59,7 @@ the syntax did not allow for a class that has an explicitly declared constructor
|
||||
The fourth form is the most generic form of them, as it can be used to initialize
|
||||
arithmetic types, class types, aggregates, pointers, and other types.
|
||||
The declaration, `T4 var4 = T4()`, should be read as follows: First a temporary
|
||||
object is created, by `T4()`. This object is [link sec:valueinit value-initialized].
|
||||
object is created, by `T4()`. This object is [link utility.utilities.value_init.details.value_initialization value-initialized].
|
||||
Next the temporary object is copied to the named variable, `var4`. Afterwards,
|
||||
the temporary is destroyed. While the copying and the destruction are likely to
|
||||
be optimized away, C++ still requires the type `T4` to be __CopyConstructible__.
|
||||
@@ -69,11 +67,11 @@ So `T4` needs to be ['both] __DefaultConstructible__ ['and] __CopyConstructible_
|
||||
|
||||
A class may not be CopyConstructible, for example because it may have a
|
||||
private and undefined copy constructor, or because it may be derived from
|
||||
`boost::noncopyable`. Scott Meyers \[[link sec:references 2]\] explains why a
|
||||
`boost::noncopyable`. Scott Meyers \[[link utility.utilities.value_init.references 2]\] explains why a
|
||||
class would be defined like that.
|
||||
|
||||
There is another, less obvious disadvantage to the fourth form, `T4 var4 = T4()`:
|
||||
It suffers from various [link sec:compiler_issues compiler issues], causing
|
||||
It suffers from various [link utility.utilities.value_init.details.compiler_issues compiler issues], causing
|
||||
a variable to be left uninitialized in some compiler specific cases.
|
||||
|
||||
The template __value_initialized__ offers a generic way to initialize
|
||||
@@ -103,13 +101,12 @@ but robust against the aforementioned compiler issues.
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:details]
|
||||
[section Details]
|
||||
[section:details Details]
|
||||
|
||||
The C++ standard \[[link sec:references 3]\] contains the definitions
|
||||
The C++ standard \[[link utility.utilities.value_init.references 3]\] contains the definitions
|
||||
of `zero-initialization` and `default-initialization`. Informally, zero-initialization
|
||||
means that the object is given the initial value `0` converted to the type and
|
||||
default-initialization means that [@https://en.cppreference.com/w/cpp/named_req/PODType POD] \[[link sec:references 4]\] types are zero-initialized,
|
||||
default-initialization means that [@https://en.cppreference.com/w/cpp/named_req/PODType POD] \[[link utility.utilities.value_init.references 4]\] types are zero-initialized,
|
||||
while non-POD class types are initialized with their corresponding default constructors.
|
||||
|
||||
A ['declaration] can contain an ['initializer], which specifies the
|
||||
@@ -136,8 +133,7 @@ foo ( __std_string__() ) ;
|
||||
// as indicated by the initializer ()
|
||||
```
|
||||
|
||||
[#sec:valueinit]
|
||||
[h5 value-initialization]
|
||||
[section:value_initialization value-initialization]
|
||||
|
||||
The first [@http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html Technical
|
||||
Corrigendum for the C++ Standard] (TC1), whose draft was released to the public in
|
||||
@@ -173,8 +169,9 @@ eat ( int() ) ; // value-initialized
|
||||
eat ( __std_string__() ) ; // value-initialized
|
||||
```
|
||||
|
||||
[#sec:valueinitsyn]
|
||||
[h5 value-initialization syntax]
|
||||
[endsect]
|
||||
|
||||
[section:syntax value-initialization syntax]
|
||||
|
||||
Value initialization is specified using `()`. However, the empty set of
|
||||
parentheses is not permitted by the syntax of initializers because it is
|
||||
@@ -224,8 +221,9 @@ This is the solution as it was supplied by earlier versions of the
|
||||
`__value_initialized__<T>` template class. Unfortunately this approach
|
||||
suffered from various compiler issues.
|
||||
|
||||
[#sec:compiler_issues]
|
||||
[h5 Compiler issues]
|
||||
[endsect]
|
||||
|
||||
[section:compiler_issues Compiler issues]
|
||||
|
||||
Various compilers have not yet fully implemented value-initialization.
|
||||
So when an object should be ['value-initialized] according to the C++ Standard,
|
||||
@@ -242,8 +240,6 @@ go wrong on various compilers.
|
||||
At the moment of writing, May 2010, the following reported issues regarding
|
||||
value-initialization are still there in current compiler releases:
|
||||
|
||||
|
||||
|
||||
* [@https://connect.microsoft.com/VisualStudio/feedback/details/100744 Microsoft Visual Studio Feedback ID 100744, Value-initialization in new-expression]: Reported by Pavel Kuznetsov (MetaCommunications Engineering), 2005.
|
||||
* [@http://connect.microsoft.com/VisualStudio/feedback/details/484295 Microsoft Visual Studio Feedback ID 484295, VC++ does not value-initialize members of derived classes without user-declared constructor] Reported by Sylvester Hesp, 2009.
|
||||
* [@https://connect.microsoft.com/VisualStudio/feedback/details/499606 Microsoft Visual Studio Feedback ID 499606, Presence of copy constructor breaks member class initialization] Reported by Alex Vakulenko, 2009
|
||||
@@ -267,11 +263,11 @@ compiler defect macro] `BOOST_NO_COMPLETE_VALUE_INITIALIZATION`.
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:types]
|
||||
[section Types and objects]
|
||||
[endsect]
|
||||
|
||||
[#sec:val_init]
|
||||
[section `template class value_initialized<T>`]
|
||||
[section:types Types and objects]
|
||||
|
||||
[section:val_init `template class value_initialized<T>`]
|
||||
|
||||
```
|
||||
namespace boost {
|
||||
@@ -323,7 +319,7 @@ void swap ( __value_initialized__<T>& lhs, __value_initialized__<T>& rhs )
|
||||
```
|
||||
|
||||
An object of this template class is a `T`-wrapper convertible to `'T&'` whose
|
||||
wrapped object (data member of type `T`) is [link sec:valueinit value-initialized] upon default-initialization
|
||||
wrapped object (data member of type `T`) is [link utility.utilities.value_init.details.value_initialization value-initialized] upon default-initialization
|
||||
of this wrapper class:
|
||||
|
||||
```
|
||||
@@ -338,7 +334,7 @@ assert( y == def ) ;
|
||||
|
||||
The purpose of this wrapper is to provide a consistent syntax for value initialization
|
||||
of scalar, union and class types (POD and non-POD) since the correct syntax for value
|
||||
initialization varies (see [link sec:valueinitsyn value-initialization syntax]).
|
||||
initialization varies (see [link utility.utilities.value_init.details.syntax value-initialization syntax]).
|
||||
|
||||
The wrapped object can be accessed either through the conversion operator
|
||||
`T&`, the member function `data()`, or the non-member function `get()`:
|
||||
@@ -404,7 +400,7 @@ supports the idea of logical constness.
|
||||
|
||||
]
|
||||
|
||||
[h5 Recommended practice: The non-member get() idiom]
|
||||
[section Recommended practice: The non-member get() idiom]
|
||||
|
||||
The obscure behavior of being able to modify a non-`const`
|
||||
wrapped object from within a constant wrapper (as was supported by previous
|
||||
@@ -426,8 +422,9 @@ get(cx_c) = 1; // ERROR: Cannot modify a const object
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:initialized]
|
||||
[section `template class initialized<T>`]
|
||||
[endsect]
|
||||
|
||||
[section:initialized `template class initialized<T>`]
|
||||
|
||||
|
||||
```
|
||||
@@ -491,8 +488,7 @@ direct-initialized, none of the two wrappers really needs to be used.
|
||||
|
||||
[endsect]
|
||||
|
||||
[#sec:initialized_value]
|
||||
[section `initialized_value`]
|
||||
[section:initialized_value `initialized_value`]
|
||||
|
||||
```
|
||||
namespace boost {
|
||||
@@ -538,8 +534,7 @@ T var = __initialized_value__;
|
||||
[endsect]
|
||||
[endsect]
|
||||
|
||||
[#sec:references]
|
||||
[section References]
|
||||
[section:references References]
|
||||
|
||||
# Bjarne Stroustrup, Gabriel Dos Reis, and J. Stephen Adamczyk wrote various papers,
|
||||
proposing to extend the support for brace-enclosed ['initializer lists]
|
||||
@@ -561,8 +556,7 @@ compiler-generated functions you do not want], [@http://www.aristeia.com/books.h
|
||||
[xinclude tmp/value_init_reference.xml]
|
||||
[/===============]
|
||||
|
||||
[#sec:acknowledgements]
|
||||
[section Acknowledgements]
|
||||
[section:acknowledgements Acknowledgements]
|
||||
|
||||
__value_initialized__ was developed by Fernando Cacciola, with help and suggestions
|
||||
from David Abrahams and Darin Adler.
|
||||
|
@@ -8,7 +8,7 @@
|
||||
import quickbook ;
|
||||
using boostbook ;
|
||||
|
||||
doxygen reference : ../../../../boost/utility/identity_type.hpp
|
||||
doxygen reference : ../../include/boost/utility/identity_type.hpp
|
||||
: <reftitle>"Reference"
|
||||
<doxygen:param>PREDEFINED="DOXYGEN"
|
||||
<doxygen:param>QUIET=YES
|
||||
|
@@ -11,48 +11,6 @@
|
||||
// An implementation of minstd_rand that does not require
|
||||
// the Random library
|
||||
|
||||
#include <boost/cstdint.hpp>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
class minstd_rand
|
||||
{
|
||||
private:
|
||||
|
||||
boost::uint_least32_t x_;
|
||||
|
||||
enum { a = 48271, m = 2147483647 };
|
||||
|
||||
public:
|
||||
|
||||
minstd_rand(): x_( 1 )
|
||||
{
|
||||
}
|
||||
|
||||
explicit minstd_rand( boost::uint_least32_t x ): x_( x % m )
|
||||
{
|
||||
if( x_ == 0 )
|
||||
{
|
||||
x_ = 1;
|
||||
}
|
||||
}
|
||||
|
||||
boost::uint_least32_t operator()()
|
||||
{
|
||||
boost::uint_least64_t y = x_;
|
||||
|
||||
y = ( a * y ) % m;
|
||||
|
||||
x_ = static_cast<boost::uint_least32_t>( y );
|
||||
|
||||
return x_;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
} // namespace boost
|
||||
#include <boost/core/detail/minstd_rand.hpp>
|
||||
|
||||
#endif // #ifndef BOOST_UTILITY_DETAIL_MINSTD_RAND_HPP_INCLUDED
|
||||
|
@@ -23,7 +23,7 @@
|
||||
// contains. More details on these issues are at libs/utility/value_init.htm
|
||||
|
||||
#include <boost/config.hpp> // For BOOST_NO_COMPLETE_VALUE_INITIALIZATION.
|
||||
#include <boost/core/swap.hpp>
|
||||
#include <boost/core/invoke_swap.hpp>
|
||||
#include <cstring>
|
||||
#include <cstddef>
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
// It is safe to ignore the following warning from MSVC 7.1 or higher:
|
||||
// "warning C4351: new behavior: elements of array will be default initialized"
|
||||
#pragma warning(disable: 4351)
|
||||
// It is safe to ignore the following MSVC warning, which may pop up when T is
|
||||
// It is safe to ignore the following MSVC warning, which may pop up when T is
|
||||
// a const type: "warning C4512: assignment operator could not be generated".
|
||||
#pragma warning(disable: 4512)
|
||||
#endif
|
||||
@@ -40,8 +40,8 @@
|
||||
#ifndef BOOST_UTILITY_DOCS
|
||||
|
||||
#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
||||
// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
|
||||
// suggests that a workaround should be applied, because of compiler issues
|
||||
// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
|
||||
// suggests that a workaround should be applied, because of compiler issues
|
||||
// regarding value-initialization.
|
||||
#define BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
|
||||
#endif
|
||||
@@ -117,7 +117,7 @@ class initialized
|
||||
BOOST_GPU_ENABLED
|
||||
void swap(initialized & arg)
|
||||
{
|
||||
::boost::swap( this->data(), arg.data() );
|
||||
::boost::core::invoke_swap( this->data(), arg.data() );
|
||||
}
|
||||
|
||||
BOOST_GPU_ENABLED
|
||||
@@ -164,13 +164,13 @@ class value_initialized
|
||||
initialized<T> m_data;
|
||||
|
||||
public :
|
||||
|
||||
|
||||
BOOST_GPU_ENABLED
|
||||
value_initialized()
|
||||
:
|
||||
m_data()
|
||||
{ }
|
||||
|
||||
|
||||
BOOST_GPU_ENABLED
|
||||
T const & data() const
|
||||
{
|
||||
@@ -228,7 +228,7 @@ void swap ( value_initialized<T> & lhs, value_initialized<T> & rhs )
|
||||
class initialized_value_t
|
||||
{
|
||||
public :
|
||||
|
||||
|
||||
template <class T> BOOST_GPU_ENABLED operator T() const
|
||||
{
|
||||
return initialized<T>().data();
|
||||
|
@@ -5,12 +5,9 @@
|
||||
"authors": [
|
||||
"Dave Abrahams and others"
|
||||
],
|
||||
"description": "Class noncopyable plus checked_delete(), checked_array_delete(), next(), prior() function templates, plus base-from-member idiom.",
|
||||
"description": "Various utilities, such as base-from-member idiom and binary literals in C++03.",
|
||||
"documentation": "utility.htm",
|
||||
"category": [
|
||||
"Algorithms",
|
||||
"Function-objects",
|
||||
"Memory",
|
||||
"Miscellaneous",
|
||||
"Patterns"
|
||||
],
|
||||
@@ -35,7 +32,7 @@
|
||||
"authors": [
|
||||
"John Maddock, Howard Hinnant, et al"
|
||||
],
|
||||
"description": "Empty member optimization.",
|
||||
"description": "A pair class with empty member optimization.",
|
||||
"documentation": "compressed_pair.htm",
|
||||
"category": [
|
||||
"Data",
|
||||
@@ -79,7 +76,7 @@
|
||||
"Dave Abrahams",
|
||||
"Jeremy Siek"
|
||||
],
|
||||
"description": "Templates ease arithmetic classes and iterators.",
|
||||
"description": "Templates to simplify operator definition in arithmetic classes and iterators.",
|
||||
"documentation": "operators.htm",
|
||||
"category": [
|
||||
"Generic",
|
||||
@@ -95,7 +92,7 @@
|
||||
"key": "utility/result_of",
|
||||
"name": "Result Of",
|
||||
"description": "Determines the type of a function call expression.",
|
||||
"documentation": "utility.htm#result_of",
|
||||
"documentation": "doc/html/utility/utilities/result_of.html",
|
||||
"category": [
|
||||
"Function-objects"
|
||||
],
|
||||
@@ -106,12 +103,13 @@
|
||||
"cxxstd": "03"
|
||||
},
|
||||
{
|
||||
"key": "utility/string_ref",
|
||||
"name": "String Ref",
|
||||
"key": "utility/string_view",
|
||||
"name": "String View",
|
||||
"description": "String view templates.",
|
||||
"documentation": "doc/html/string_ref.html",
|
||||
"documentation": "doc/html/utility/utilities/string_view.html",
|
||||
"category": [
|
||||
"Containers"
|
||||
"Containers",
|
||||
"String"
|
||||
],
|
||||
"authors": "Marshall Clow",
|
||||
"maintainers": [
|
||||
|
@@ -8,12 +8,14 @@
|
||||
# bring in rules for testing
|
||||
import testing ;
|
||||
|
||||
project : requirements <library>/boost/utility//boost_utility ;
|
||||
|
||||
run base_from_member_test.cpp ;
|
||||
run base_from_member_ref_test.cpp ;
|
||||
|
||||
run binary_test.cpp ;
|
||||
|
||||
run call_traits_test.cpp : -u ;
|
||||
run call_traits_test.cpp : -u : : <library>/boost/type_traits//testing ;
|
||||
|
||||
run compressed_pair_test.cpp ;
|
||||
run compressed_pair_final_test.cpp ;
|
||||
@@ -31,7 +33,7 @@ run string_ref_test2.cpp ;
|
||||
run string_ref_test_io.cpp ;
|
||||
# compile-fail string_view_from_rvalue.cpp ;
|
||||
compile string_view_constexpr_test1.cpp ;
|
||||
run string_view_test1.cpp ;
|
||||
run string_view_test1.cpp : : : <library>/boost/container_hash//boost_container_hash ;
|
||||
run string_view_test2.cpp ;
|
||||
run string_view_test_io.cpp ;
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// boost::compressed_pair test program
|
||||
|
||||
// (C) Copyright John Maddock 2000.
|
||||
// boost::compressed_pair test program
|
||||
|
||||
// (C) Copyright John Maddock 2000.
|
||||
// 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).
|
||||
@@ -18,8 +18,8 @@
|
||||
#include <typeinfo>
|
||||
#include <boost/call_traits.hpp>
|
||||
|
||||
#include <libs/type_traits/test/test.hpp>
|
||||
#include <libs/type_traits/test/check_type.hpp>
|
||||
// type_traits/test utilities
|
||||
#include "check_type.hpp"
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(disable:4181) // : warning C4181: qualifier applied to reference type; ignored
|
||||
@@ -45,7 +45,7 @@ struct contained
|
||||
|
||||
// stored value:
|
||||
value_type v_;
|
||||
|
||||
|
||||
// constructors:
|
||||
contained() {}
|
||||
contained(param_type p) : v_(p){}
|
||||
@@ -197,11 +197,11 @@ struct comparible_UDT
|
||||
comparible_UDT() : i_(2){}
|
||||
comparible_UDT(const comparible_UDT& other) : i_(other.i_){}
|
||||
comparible_UDT& operator=(const comparible_UDT& other)
|
||||
{
|
||||
{
|
||||
i_ = other.i_;
|
||||
return *this;
|
||||
}
|
||||
bool operator == (const comparible_UDT& v){ return v.i_ == i_; }
|
||||
bool operator == (const comparible_UDT& v) const { return v.i_ == i_; }
|
||||
};
|
||||
|
||||
int main()
|
||||
@@ -339,7 +339,7 @@ void call_traits_test<T, isarray>::assert_construct(typename call_traits_test<T,
|
||||
param_type p2(v);
|
||||
param_type p3(r);
|
||||
param_type p4(p);
|
||||
|
||||
|
||||
unused_variable(v2);
|
||||
unused_variable(v3);
|
||||
unused_variable(v4);
|
||||
@@ -388,7 +388,7 @@ void call_traits_test<T, true>::assert_construct(typename boost::call_traits<T>:
|
||||
param_type p2(v);
|
||||
param_type p3(r);
|
||||
param_type p4(p);
|
||||
|
||||
|
||||
unused_variable(v2);
|
||||
unused_variable(v3);
|
||||
unused_variable(v4);
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#include <boost/core/invoke_swap.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/config/workaround.hpp>
|
||||
|
||||
@@ -360,7 +361,7 @@ int main()
|
||||
boost::value_initialized<SwapFunctionCallTester> swapFunctionCallTester2;
|
||||
get(swapFunctionCallTester1).data = 1;
|
||||
get(swapFunctionCallTester2).data = 2;
|
||||
boost::swap(swapFunctionCallTester1, swapFunctionCallTester2);
|
||||
boost::core::invoke_swap(swapFunctionCallTester1, swapFunctionCallTester2);
|
||||
BOOST_TEST( get(swapFunctionCallTester1).data == 2 );
|
||||
BOOST_TEST( get(swapFunctionCallTester2).data == 1 );
|
||||
BOOST_TEST( get(swapFunctionCallTester1).is_custom_swap_called );
|
||||
|
Reference in New Issue
Block a user