mirror of
https://github.com/boostorg/throw_exception.git
synced 2025-06-29 22:11:09 +02:00
Compare commits
34 Commits
boost-1.69
...
feature/so
Author | SHA1 | Date | |
---|---|---|---|
3cd085a324 | |||
50a43b9512 | |||
e452a9ee16 | |||
86e09cc261 | |||
914d5a2ad3 | |||
9c6c409ada | |||
38d5273ad7 | |||
cab10beccd | |||
36f998f9b2 | |||
bc6f095b3d | |||
ac72b396f5 | |||
9e8a607ad9 | |||
fdf6b240f5 | |||
81e3072d04 | |||
fe38fbc5cf | |||
26bc9374e2 | |||
a2a78f6e46 | |||
c58f418c2f | |||
6458a1de40 | |||
ea9bd58f8c | |||
f477e33259 | |||
8a1382d6bf | |||
915a1dc49b | |||
eec2255703 | |||
970f826a75 | |||
2522bb5617 | |||
dad5cb4ed3 | |||
43a57d518c | |||
e2e802e508 | |||
5143552817 | |||
1e507924ce | |||
50c34dee24 | |||
37dfb7fe92 | |||
9dfba607d9 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/.vscode/ipch/*
|
125
.travis.yml
125
.travis.yml
@ -4,9 +4,7 @@
|
|||||||
|
|
||||||
language: cpp
|
language: cpp
|
||||||
|
|
||||||
sudo: false
|
dist: xenial
|
||||||
|
|
||||||
python: "2.7"
|
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
@ -110,7 +108,7 @@ matrix:
|
|||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: g++-8
|
compiler: g++-8
|
||||||
env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11,14,17
|
env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11,14,17,2a
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@ -119,12 +117,22 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: g++-8
|
compiler: g++-9
|
||||||
env: UBSAN=1 TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11,14,17 UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold
|
env: TOOLSET=gcc COMPILER=g++-9 CXXSTD=03,11,14,17,2a
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- g++-8
|
- g++-9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-9
|
||||||
|
env: UBSAN=1 TOOLSET=gcc COMPILER=g++-9 CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-9
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
@ -133,6 +141,7 @@ matrix:
|
|||||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11
|
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
|
dist: trusty
|
||||||
compiler: /usr/bin/clang++
|
compiler: /usr/bin/clang++
|
||||||
env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
|
env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
|
||||||
addons:
|
addons:
|
||||||
@ -141,6 +150,7 @@ matrix:
|
|||||||
- clang-3.3
|
- clang-3.3
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
|
dist: trusty
|
||||||
compiler: /usr/bin/clang++
|
compiler: /usr/bin/clang++
|
||||||
env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
|
env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
|
||||||
addons:
|
addons:
|
||||||
@ -149,13 +159,13 @@ matrix:
|
|||||||
- clang-3.4
|
- clang-3.4
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
|
dist: trusty
|
||||||
compiler: clang++-3.5
|
compiler: clang++-3.5
|
||||||
env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03,11,14,1z
|
env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03,11,14,1z
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-3.5
|
- clang-3.5
|
||||||
- libstdc++-4.9-dev
|
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
@ -166,7 +176,16 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-3.6
|
- clang-3.6
|
||||||
- libstdc++-4.9-dev
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.7
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.7
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
@ -177,7 +196,6 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-3.8
|
- clang-3.8
|
||||||
- libstdc++-4.9-dev
|
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
@ -188,7 +206,6 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-3.9
|
- clang-3.9
|
||||||
- libstdc++-4.9-dev
|
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
@ -199,10 +216,8 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-4.0
|
- clang-4.0
|
||||||
- libstdc++-4.9-dev
|
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-4.0
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-5.0
|
compiler: clang++-5.0
|
||||||
@ -211,10 +226,8 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-5.0
|
- clang-5.0
|
||||||
- libstdc++-4.9-dev
|
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-5.0
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-6.0
|
compiler: clang++-6.0
|
||||||
@ -225,20 +238,54 @@ matrix:
|
|||||||
- clang-6.0
|
- clang-6.0
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-6.0
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-6.0
|
compiler: clang++-7
|
||||||
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=03,11,14,17 UBSAN_OPTIONS=print_stacktrace=1
|
env: TOOLSET=clang COMPILER=clang++-7 CXXSTD=03,11,14,17,2a
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-6.0
|
- clang-7
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-6.0
|
- llvm-toolchain-xenial-7
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
|
compiler: clang++-8
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-xenial-8
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-9
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-9 CXXSTD=03,11,14,17,2a
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
|
||||||
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-8
|
||||||
|
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-xenial-8
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
dist: trusty
|
||||||
compiler: clang++-libc++
|
compiler: clang++-libc++
|
||||||
env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z
|
env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z
|
||||||
addons:
|
addons:
|
||||||
@ -247,6 +294,7 @@ matrix:
|
|||||||
- libc++-dev
|
- libc++-dev
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
|
dist: trusty
|
||||||
compiler: clang++-libc++
|
compiler: clang++-libc++
|
||||||
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1
|
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1
|
||||||
addons:
|
addons:
|
||||||
@ -258,13 +306,46 @@ matrix:
|
|||||||
compiler: clang++
|
compiler: clang++
|
||||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
|
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
compiler: clang++
|
||||||
|
env: UBSAN=1 TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
env: CMAKE=1
|
||||||
|
script:
|
||||||
|
- mkdir __build__ && cd __build__
|
||||||
|
- cmake -DBOOST_ENABLE_CMAKE=1 -DBoost_VERBOSE=1 -DBOOST_INCLUDE_LIBRARIES=throw_exception ..
|
||||||
|
- ctest --output-on-failure -R boost_throw_exception
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
env: CMAKE_SUBDIR=1
|
||||||
|
install:
|
||||||
|
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
|
||||||
|
- git clone -b $BOOST_BRANCH https://github.com/boostorg/assert.git ../assert
|
||||||
|
- git clone -b $BOOST_BRANCH https://github.com/boostorg/config.git ../config
|
||||||
|
- git clone -b $BOOST_BRANCH https://github.com/boostorg/core.git ../core
|
||||||
|
script:
|
||||||
|
- cd test/cmake_subdir_test && mkdir __build__ && cd __build__
|
||||||
|
- cmake ..
|
||||||
|
- cmake --build .
|
||||||
|
- cmake --build . --target check
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
env: CMAKE_INSTALL=1
|
||||||
|
script:
|
||||||
|
- mkdir __build__ && cd __build__
|
||||||
|
- cmake -DBOOST_ENABLE_CMAKE=1 -DBoost_VERBOSE=1 -DBOOST_INCLUDE_LIBRARIES=throw_exception -DCMAKE_INSTALL_PREFIX=~/.local ..
|
||||||
|
- cmake --build . --target install
|
||||||
|
- cd ../libs/throw_exception/test/cmake_install_test && mkdir __build__ && cd __build__
|
||||||
|
- cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
|
||||||
|
- cmake --build .
|
||||||
|
- cmake --build . --target check
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
|
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
|
||||||
- cd ..
|
- cd ..
|
||||||
- git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
|
- git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||||
- cd boost-root
|
- cd boost-root
|
||||||
- git submodule update --init tools/build
|
|
||||||
- git submodule update --init libs/config
|
|
||||||
- git submodule update --init tools/boostdep
|
- git submodule update --init tools/boostdep
|
||||||
- cp -r $TRAVIS_BUILD_DIR/* libs/throw_exception
|
- cp -r $TRAVIS_BUILD_DIR/* libs/throw_exception
|
||||||
- python tools/boostdep/depinst/depinst.py throw_exception
|
- python tools/boostdep/depinst/depinst.py throw_exception
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
# Copyright 2018 Mike Dev
|
# Copyright 2019 Peter Dimov
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
|
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
# Partial (add_subdirectory only) and experimental CMake support
|
cmake_minimum_required(VERSION 3.5...3.16)
|
||||||
# Subject to change; please do not rely on the contents of this file yet
|
project(boost_throw_exception VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.5)
|
|
||||||
project(BoostThrowException LANGUAGES CXX)
|
|
||||||
|
|
||||||
add_library(boost_throw_exception INTERFACE)
|
add_library(boost_throw_exception INTERFACE)
|
||||||
add_library(Boost::throw_exception ALIAS boost_throw_exception)
|
add_library(Boost::throw_exception ALIAS boost_throw_exception)
|
||||||
@ -14,7 +11,20 @@ add_library(Boost::throw_exception ALIAS boost_throw_exception)
|
|||||||
target_include_directories(boost_throw_exception INTERFACE include)
|
target_include_directories(boost_throw_exception INTERFACE include)
|
||||||
|
|
||||||
target_link_libraries(boost_throw_exception
|
target_link_libraries(boost_throw_exception
|
||||||
INTERFACE
|
INTERFACE
|
||||||
Boost::assert
|
Boost::assert
|
||||||
Boost::config
|
Boost::config
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(BOOST_SUPERPROJECT_VERSION)
|
||||||
|
|
||||||
|
include(BoostInstall)
|
||||||
|
boost_install(TARGETS boost_throw_exception HEADER_DIRECTORY include/)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(BUILD_TESTING)
|
||||||
|
|
||||||
|
add_subdirectory(test)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
28
appveyor.yml
28
appveyor.yml
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2016-2018 Peter Dimov
|
# Copyright 2016-2019 Peter Dimov
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
@ -14,26 +14,31 @@ branches:
|
|||||||
|
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
|
||||||
TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0,msvc-12.0
|
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
TOOLSET: msvc-14.0
|
TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0,msvc-12.0,msvc-14.0
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
TOOLSET: msvc-14.1
|
TOOLSET: msvc-14.1
|
||||||
CXXSTD: 14,17
|
CXXSTD: 14,17
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
TOOLSET: clang-win
|
||||||
|
CXXSTD: 14,17
|
||||||
|
ADDRMD: 64
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
|
TOOLSET: msvc-14.2
|
||||||
|
CXXSTD: 14,17
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
ADDPATH: C:\cygwin\bin;
|
ADDPATH: C:\cygwin\bin;
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
CXXSTD: 03,11,14,1z
|
CXXSTD: 03,11,14,1z
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
ADDPATH: C:\cygwin64\bin;
|
ADDPATH: C:\cygwin64\bin;
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
CXXSTD: 03,11,14,1z
|
CXXSTD: 03,11,14,1z
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
ADDPATH: C:\mingw\bin;
|
ADDPATH: C:\mingw\bin;
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
CXXSTD: 03,11,14,1z
|
CXXSTD: 03,11,14,1z
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
CXXSTD: 03,11,14,1z
|
CXXSTD: 03,11,14,1z
|
||||||
@ -44,10 +49,8 @@ install:
|
|||||||
- cd ..
|
- cd ..
|
||||||
- git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
|
- git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||||
- cd boost-root
|
- cd boost-root
|
||||||
- git submodule update --init tools/build
|
|
||||||
- git submodule update --init libs/config
|
|
||||||
- git submodule update --init tools/boostdep
|
- git submodule update --init tools/boostdep
|
||||||
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\throw_exception
|
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\throw_exception\
|
||||||
- python tools/boostdep/depinst/depinst.py throw_exception
|
- python tools/boostdep/depinst/depinst.py throw_exception
|
||||||
- cmd /c bootstrap
|
- cmd /c bootstrap
|
||||||
- b2 -d0 headers
|
- b2 -d0 headers
|
||||||
@ -57,4 +60,5 @@ build: off
|
|||||||
test_script:
|
test_script:
|
||||||
- PATH=%ADDPATH%%PATH%
|
- PATH=%ADDPATH%%PATH%
|
||||||
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
||||||
- b2 -j 3 libs/throw_exception/test toolset=%TOOLSET% %CXXSTD%
|
- if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
|
||||||
|
- b2 -j3 libs/throw_exception/test toolset=%TOOLSET% %CXXSTD% %ADDRMD% variant=debug,release
|
||||||
|
2
doc/.gitignore
vendored
Normal file
2
doc/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/html/
|
||||||
|
/pdf/
|
@ -1,55 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
|
|
||||||
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
|
|
||||||
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
|
|
||||||
<title>BOOST_THROW_EXCEPTION</title>
|
|
||||||
<link href='reno.css' type='text/css' rel='stylesheet'/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="body-0">
|
|
||||||
<div class="body-1">
|
|
||||||
<div class="body-2">
|
|
||||||
<div>
|
|
||||||
<div id="boost_logo">
|
|
||||||
<a href="http://www.boost.org"><img style="border:0" src="../../../boost.png" alt="Boost" width="277" height="86"/></a>
|
|
||||||
</div>
|
|
||||||
<h1>Boost Exception</h1>
|
|
||||||
</div>
|
|
||||||
<!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
|
|
||||||
<!-- 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) -->
|
|
||||||
<div class="RenoIncludeDIV"><div class="RenoAutoDIV"><h3>BOOST_THROW_EXCEPTION</h3>
|
|
||||||
</div>
|
|
||||||
<div class="RenoIncludeDIV"><p><span class="RenoEscape">#<!--<wiki>`#</wiki>--></span>include <<span class="RenoLink"><a href="boost_throw_exception_hpp.html">boost/throw_exception.hpp</a></span>></p>
|
|
||||||
<div class="RenoIncludeDIV"><pre>#if !defined( BOOST_EXCEPTION_DISABLE )
|
|
||||||
#include <<span class="RenoLink"><a href="boost_exception_exception_hpp.html">boost/exception/exception.hpp</a></span>>
|
|
||||||
#include <boost/current_function.hpp>
|
|
||||||
#define <span class="RenoLink">BOOST_THROW_EXCEPTION</span>(x)\
|
|
||||||
::boost::<span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>( ::boost::<span class="RenoLink"><a href="enable_error_info.html">enable_error_info</a></span>(x) <<\
|
|
||||||
::boost::<span class="RenoLink"><a href="boost_exception_exception_hpp.html">throw_function</a></span>(<span class="RenoLink"><a href="configuration_macros.html">BOOST_THROW_EXCEPTION_CURRENT_FUNCTION</a></span>) <<\
|
|
||||||
::boost::<span class="RenoLink"><a href="boost_exception_exception_hpp.html">throw_file</a></span>(__FILE__) <<\
|
|
||||||
::boost::<span class="RenoLink"><a href="boost_exception_exception_hpp.html">throw_line</a></span>((int)__LINE__) )
|
|
||||||
#else
|
|
||||||
#define <span class="RenoLink">BOOST_THROW_EXCEPTION</span>(x) ::boost::<span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>(x)
|
|
||||||
#endif</pre>
|
|
||||||
</div></div><p>This macro takes an exception object, records the current function name, __FILE__ and __LINE__ in it, and forwards it to <span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>. To recover this information at the catch site, use <span class="RenoLink"><a href="get_error_info.html">get_error_info</a></span>; the information is also included in the message returned by <span class="RenoLink"><a href="diagnostic_information.html">diagnostic_information</a></span>.</p>
|
|
||||||
</div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
|
|
||||||
See also: <span class="RenoPageList"><a href="boost-exception.html">Boost Exception</a> | <a href="boost_throw_exception_hpp.html">boost/throw_exception.hpp</a> | <a href="configuration_macros.html">Configuration Macros</a> | <a href="frequently_asked_questions.html">Frequently Asked Questions</a></span>
|
|
||||||
</div>
|
|
||||||
<!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
|
|
||||||
<!-- 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) -->
|
|
||||||
<div id="footer">
|
|
||||||
<p>
|
|
||||||
<a class="logo" href="http://jigsaw.w3.org/css-validator/check/referer"><img class="logo_pic" src="valid-css.png" alt="Valid CSS" height="31" width="88"/></a>
|
|
||||||
<a class="logo" href="http://validator.w3.org/check?uri=referer"><img class="logo_pic" src="valid-xhtml.png" alt="Valid XHTML 1.0" height="31" width="88"/></a>
|
|
||||||
<small>Copyright (c) 2006-2009 by Emil Dotchevski and Reverge Studios, Inc.<br/>
|
|
||||||
Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</small>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
23
doc/Jamfile
Normal file
23
doc/Jamfile
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Copyright 2017 Peter Dimov
|
||||||
|
#
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
import asciidoctor ;
|
||||||
|
|
||||||
|
html throw_exception.html : index.adoc ;
|
||||||
|
|
||||||
|
install html_ : throw_exception.html : <location>html ;
|
||||||
|
|
||||||
|
pdf throw_exception.pdf : index.adoc ;
|
||||||
|
explicit throw_exception.pdf ;
|
||||||
|
|
||||||
|
install pdf_ : throw_exception.pdf : <location>pdf ;
|
||||||
|
explicit pdf_ ;
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
alias boostdoc ;
|
||||||
|
explicit boostdoc ;
|
||||||
|
alias boostrelease : html_ ;
|
||||||
|
explicit boostrelease ;
|
@ -1,65 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
|
|
||||||
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
|
|
||||||
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
|
|
||||||
<title>boost/throw_exception.hpp</title>
|
|
||||||
<link href='reno.css' type='text/css' rel='stylesheet'/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="body-0">
|
|
||||||
<div class="body-1">
|
|
||||||
<div class="body-2">
|
|
||||||
<div>
|
|
||||||
<div id="boost_logo">
|
|
||||||
<a href="http://www.boost.org"><img style="border:0" src="../../../boost.png" alt="Boost" width="277" height="86"/></a>
|
|
||||||
</div>
|
|
||||||
<h1>Boost Exception</h1>
|
|
||||||
</div>
|
|
||||||
<!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
|
|
||||||
<!-- 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) -->
|
|
||||||
<div class="RenoIncludeDIV"><div class="RenoAutoDIV"><h2>boost/throw_exception.hpp</h2>
|
|
||||||
</div>
|
|
||||||
<h3>Synopsis</h3>
|
|
||||||
<div class="RenoIncludeDIV"><div class="RenoIncludeDIV"><pre><span class="RenoIncludeSPAN">#if !defined( BOOST_EXCEPTION_DISABLE )
|
|
||||||
#include <<span class="RenoLink"><a href="boost_exception_exception_hpp.html">boost/exception/exception.hpp</a></span>>
|
|
||||||
#include <boost/current_function.hpp>
|
|
||||||
#define <span class="RenoLink"><a href="BOOST_THROW_EXCEPTION.html">BOOST_THROW_EXCEPTION</a></span>(x)\
|
|
||||||
::boost::<span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>( ::boost::<span class="RenoLink"><a href="enable_error_info.html">enable_error_info</a></span>(x) <<\
|
|
||||||
::boost::<span class="RenoLink"><a href="boost_exception_exception_hpp.html">throw_function</a></span>(<span class="RenoLink"><a href="configuration_macros.html">BOOST_THROW_EXCEPTION_CURRENT_FUNCTION</a></span>) <<\
|
|
||||||
::boost::<span class="RenoLink"><a href="boost_exception_exception_hpp.html">throw_file</a></span>(__FILE__) <<\
|
|
||||||
::boost::<span class="RenoLink"><a href="boost_exception_exception_hpp.html">throw_line</a></span>((int)__LINE__) )
|
|
||||||
#else
|
|
||||||
#define <span class="RenoLink"><a href="BOOST_THROW_EXCEPTION.html">BOOST_THROW_EXCEPTION</a></span>(x) ::boost::<span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>(x)
|
|
||||||
#endif</span>
|
|
||||||
|
|
||||||
namespace
|
|
||||||
boost
|
|
||||||
{
|
|
||||||
<span class="RenoIncludeSPAN">#ifdef BOOST_NO_EXCEPTIONS
|
|
||||||
void <span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>( std::exception const & e ); // user defined
|
|
||||||
#else
|
|
||||||
template <class E>
|
|
||||||
void <span class="RenoLink"><a href="throw_exception.html">throw_exception</a></span>( E const & e );
|
|
||||||
#endif</span>
|
|
||||||
}</pre>
|
|
||||||
</div></div></div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
|
|
||||||
See also: <span class="RenoPageList"><a href="BOOST_THROW_EXCEPTION.html">BOOST_THROW_EXCEPTION</a> | <a href="configuration_macros.html">Configuration Macros</a> | <a href="synopsis.html">Synopsis</a> | <a href="throw_exception.html">throw_exception</a></span>
|
|
||||||
</div>
|
|
||||||
<!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
|
|
||||||
<!-- 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) -->
|
|
||||||
<div id="footer">
|
|
||||||
<p>
|
|
||||||
<a class="logo" href="http://jigsaw.w3.org/css-validator/check/referer"><img class="logo_pic" src="valid-css.png" alt="Valid CSS" height="31" width="88"/></a>
|
|
||||||
<a class="logo" href="http://validator.w3.org/check?uri=referer"><img class="logo_pic" src="valid-xhtml.png" alt="Valid XHTML 1.0" height="31" width="88"/></a>
|
|
||||||
<small>Copyright (c) 2006-2009 by Emil Dotchevski and Reverge Studios, Inc.<br/>
|
|
||||||
Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</small>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
19
doc/changes.adoc
Normal file
19
doc/changes.adoc
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
////
|
||||||
|
Copyright 2019 Peter Dimov
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
////
|
||||||
|
|
||||||
|
[#changes]
|
||||||
|
# Revision History
|
||||||
|
:toc:
|
||||||
|
:toc-title:
|
||||||
|
:idprefix:
|
||||||
|
|
||||||
|
## Changes in 1.73.0
|
||||||
|
|
||||||
|
* Added an overload of `throw_exception` that takes a `boost::source_location`
|
||||||
|
object.
|
||||||
|
|
||||||
|
NOTE: Projects using `BOOST_THROW_EXCEPTION` with exceptions disabled will need
|
||||||
|
to add a definition of this new overload.
|
117
doc/description.adoc
Normal file
117
doc/description.adoc
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
////
|
||||||
|
Copyright 2019 Peter Dimov
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
////
|
||||||
|
|
||||||
|
[#description]
|
||||||
|
# Description
|
||||||
|
:toc:
|
||||||
|
:toc-title:
|
||||||
|
:idprefix:
|
||||||
|
|
||||||
|
The header `<boost/throw_exception.hpp>` provides a common Boost infrastructure
|
||||||
|
for throwing exceptions, in the form of a function `boost::throw_exception`
|
||||||
|
and a macro `BOOST_THROW_EXCEPTION`.
|
||||||
|
|
||||||
|
`boost::throw_exception(x);` is a replacement for `throw x;` that both
|
||||||
|
degrades gracefully when exception handling support is not available, and
|
||||||
|
integrates the thrown exception into facilities provided by
|
||||||
|
link:../../../exception/index.html[Boost.Exception], such as automatically
|
||||||
|
providing a base class of type `boost::exception` and support for
|
||||||
|
`boost::exception_ptr`.
|
||||||
|
|
||||||
|
When exception handling is not available, the function is only declared, but
|
||||||
|
not defined. This allows users to provide their own definition.
|
||||||
|
|
||||||
|
An overload for `boost::throw_exception` that takes a
|
||||||
|
link:../../../assert/doc/html/assert.html#source_location_support[`boost::source_location`]
|
||||||
|
is provided. It records the supplied source location into the `boost::exception`
|
||||||
|
base class, from where it can later be retrieved when the exception is caught.
|
||||||
|
link:../../../exception/doc/diagnostic_information.html[`boost::diagnostic_information`]
|
||||||
|
automatically displays the stored source location.
|
||||||
|
|
||||||
|
The macro `BOOST_THROW_EXCEPTION(x)` expands to
|
||||||
|
`::boost::throw_exception(x, BOOST_CURRENT_LOCATION)`, passing the current source
|
||||||
|
location.
|
||||||
|
|
||||||
|
[#examples]
|
||||||
|
# Examples
|
||||||
|
:toc:
|
||||||
|
:toc-title:
|
||||||
|
:idprefix:
|
||||||
|
|
||||||
|
## Using BOOST_THROW_EXCEPTION
|
||||||
|
|
||||||
|
```
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <boost/exception/diagnostic_information.hpp>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
void f()
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( std::runtime_error( "Unspecified runtime error" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
f();
|
||||||
|
}
|
||||||
|
catch( std::exception const & x )
|
||||||
|
{
|
||||||
|
std::cerr << boost::diagnostic_information( x ) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using boost::throw_exception with a source location
|
||||||
|
|
||||||
|
```
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <boost/exception/diagnostic_information.hpp>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <cstddef>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
void throw_index_error( std::size_t i, std::size_t n,
|
||||||
|
boost::source_location const & loc )
|
||||||
|
{
|
||||||
|
std::string msg = "Index out of range: "
|
||||||
|
+ boost::lexical_cast<std::string>( i ) + " >= "
|
||||||
|
+ boost::lexical_cast<std::string>( n );
|
||||||
|
|
||||||
|
boost::throw_exception( std::out_of_range( msg ), loc );
|
||||||
|
}
|
||||||
|
|
||||||
|
void f1( std::size_t i, std::size_t n )
|
||||||
|
{
|
||||||
|
if( i >= n )
|
||||||
|
{
|
||||||
|
throw_index_error( i, n, BOOST_CURRENT_LOCATION );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void f2( std::size_t i, std::size_t n )
|
||||||
|
{
|
||||||
|
if( i >= n )
|
||||||
|
{
|
||||||
|
throw_index_error( i, n, BOOST_CURRENT_LOCATION );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
f1( 4, 3 );
|
||||||
|
}
|
||||||
|
catch( std::exception const & x )
|
||||||
|
{
|
||||||
|
std::cerr << boost::diagnostic_information( x ) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
6
doc/index-docinfo-footer.html
Normal file
6
doc/index-docinfo-footer.html
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<style>
|
||||||
|
|
||||||
|
*:not(pre)>code { background: none; color: #600000; }
|
||||||
|
:not(pre):not([class^=L])>code { background: none; color: #600000; }
|
||||||
|
|
||||||
|
</style>
|
27
doc/index.adoc
Normal file
27
doc/index.adoc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
////
|
||||||
|
Copyright 2017, 2019 Peter Dimov
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
////
|
||||||
|
|
||||||
|
# Boost.ThrowException
|
||||||
|
Peter Dimov, Emil Dotchevski
|
||||||
|
:toc: left
|
||||||
|
:idprefix:
|
||||||
|
:docinfo: private-footer
|
||||||
|
|
||||||
|
:leveloffset: +1
|
||||||
|
|
||||||
|
include::description.adoc[]
|
||||||
|
include::changes.adoc[]
|
||||||
|
include::reference.adoc[]
|
||||||
|
|
||||||
|
:leveloffset: -1
|
||||||
|
|
||||||
|
[appendix]
|
||||||
|
## Copyright and License
|
||||||
|
|
||||||
|
This documentation is
|
||||||
|
|
||||||
|
* Copyright 2019 Peter Dimov
|
||||||
|
* Distributed under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License, Version 1.0].
|
98
doc/reference.adoc
Normal file
98
doc/reference.adoc
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
////
|
||||||
|
Copyright 2019 Peter Dimov
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
////
|
||||||
|
|
||||||
|
[#reference]
|
||||||
|
# Reference
|
||||||
|
:toc:
|
||||||
|
:toc-title:
|
||||||
|
:idprefix:
|
||||||
|
|
||||||
|
[#synopsis]
|
||||||
|
## <boost/throw_exception.hpp> Synopsis
|
||||||
|
|
||||||
|
```
|
||||||
|
#include <boost/assert/source_location.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
|
||||||
|
#if defined( BOOST_NO_EXCEPTIONS )
|
||||||
|
|
||||||
|
BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined
|
||||||
|
|
||||||
|
BOOST_NORETURN void throw_exception( std::exception const & e,
|
||||||
|
boost::source_location const & loc ); // user defined
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e );
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e,
|
||||||
|
boost::source_location const & loc );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#define BOOST_THROW_EXCEPTION(x) \
|
||||||
|
::boost::throw_exception(x, BOOST_CURRENT_LOCATION)
|
||||||
|
```
|
||||||
|
|
||||||
|
## throw_exception
|
||||||
|
|
||||||
|
```
|
||||||
|
#if defined( BOOST_NO_EXCEPTIONS )
|
||||||
|
|
||||||
|
BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires: :: `E` must have `std::exception` as a public and unambiguous base
|
||||||
|
class.
|
||||||
|
|
||||||
|
Effects: ::
|
||||||
|
* When exceptions aren't available, the function is declared, but
|
||||||
|
not defined. The user is expected to supply an appropriate definition.
|
||||||
|
* Otherwise, if `BOOST_EXCEPTION_DISABLE` is defined, the function
|
||||||
|
throws `e`.
|
||||||
|
* Otherwise, the function throws an object of a type derived from `E`,
|
||||||
|
derived from `boost::exception`, if `E` doesn't already derive from
|
||||||
|
it, and containing the necessary support for `boost::exception_ptr`.
|
||||||
|
|
||||||
|
```
|
||||||
|
#if defined( BOOST_NO_EXCEPTIONS )
|
||||||
|
|
||||||
|
BOOST_NORETURN void throw_exception( std::exception const & e,
|
||||||
|
boost::source_location const & loc ); // user defined
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e,
|
||||||
|
boost::source_location const & loc );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires: :: `E` must have `std::exception` as a public and unambiguous base
|
||||||
|
class.
|
||||||
|
|
||||||
|
Effects: ::
|
||||||
|
* When exceptions aren't available, the function is declared, but
|
||||||
|
not defined. The user is expected to supply an appropriate definition.
|
||||||
|
* Otherwise, if `BOOST_EXCEPTION_DISABLE` is defined, the function
|
||||||
|
throws `e`.
|
||||||
|
* Otherwise, the function throws an object of a type derived from `E`,
|
||||||
|
derived from `boost::exception`, if `E` doesn't already derive from
|
||||||
|
it, and containing the necessary support for `boost::exception_ptr`. The
|
||||||
|
`boost::exception` base class is initialized to contain the source
|
||||||
|
location `loc`.
|
226
doc/reno.css
226
doc/reno.css
@ -1,226 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
|
|
||||||
*
|
|
||||||
* 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)
|
|
||||||
*/
|
|
||||||
|
|
||||||
body
|
|
||||||
{
|
|
||||||
font-family: Trebuchet, Verdana, Arial, Helvetica, Sans;
|
|
||||||
font-size: 10pt;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
background-color: #E5E5E5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RenoPageList,
|
|
||||||
ol,
|
|
||||||
ul
|
|
||||||
{
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RenoPageList
|
|
||||||
{
|
|
||||||
margin:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1
|
|
||||||
{
|
|
||||||
font-size: 24pt;
|
|
||||||
clear: left;
|
|
||||||
padding-top: 5pt;
|
|
||||||
padding-bottom: 5pt;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2
|
|
||||||
{
|
|
||||||
font-size: 18pt;
|
|
||||||
clear: left;
|
|
||||||
padding-top: 20pt;
|
|
||||||
padding-bottom: 5pt;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3
|
|
||||||
{
|
|
||||||
font-size: 14pt;
|
|
||||||
clear: left;
|
|
||||||
padding-top: 15pt;
|
|
||||||
padding-bottom: 5pt;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4
|
|
||||||
{
|
|
||||||
font-size: 10pt;
|
|
||||||
float: left;
|
|
||||||
clear: left;
|
|
||||||
padding-top: 5pt;
|
|
||||||
padding-bottom: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
margin-right: 4pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
p
|
|
||||||
{
|
|
||||||
font-size: 10pt;
|
|
||||||
padding-top: 5pt;
|
|
||||||
padding-bottom: 5pt;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
clear:right;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre
|
|
||||||
{
|
|
||||||
border-top: 1px solid #C5C5C5;
|
|
||||||
border-bottom: 1px solid #C5C5C5;
|
|
||||||
border-left: 1px solid #C5C5C5;
|
|
||||||
border-right: 1px solid #C5C5C5;
|
|
||||||
font-size: 10pt;
|
|
||||||
padding-top: 5pt;
|
|
||||||
padding-bottom: 5pt;
|
|
||||||
padding-left: 5pt;
|
|
||||||
padding-right: 5pt;
|
|
||||||
margin-left: 18pt;
|
|
||||||
margin-right: 18pt;
|
|
||||||
margin-top: 10pt;
|
|
||||||
margin-bottom: 10pt;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol,ul
|
|
||||||
{
|
|
||||||
padding-top: 0;
|
|
||||||
padding-bottom: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul li
|
|
||||||
{
|
|
||||||
padding-top: 5pt;
|
|
||||||
padding-bottom: 5pt;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RenoIndex h3
|
|
||||||
{
|
|
||||||
margin: 20pt 0 5pt 0;
|
|
||||||
padding: 2pt;
|
|
||||||
display: inline;
|
|
||||||
border: 1.5pt solid #A0A0A0;
|
|
||||||
float: left;
|
|
||||||
clear: both;
|
|
||||||
width: 15pt;
|
|
||||||
text-align: center;
|
|
||||||
background-color: #EAEAEA;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RenoIndex p
|
|
||||||
{
|
|
||||||
clear: both;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RenoHookUnbound,
|
|
||||||
.RenoHookBound
|
|
||||||
{
|
|
||||||
background-position: left center;
|
|
||||||
background-image: url('link.gif');
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
padding-left: 10pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RenoIncludeDIV
|
|
||||||
{
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.RenoError
|
|
||||||
{
|
|
||||||
background-color: red;
|
|
||||||
color: white;
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
a
|
|
||||||
{
|
|
||||||
text-decoration: underline;
|
|
||||||
color: #0000AA;
|
|
||||||
}
|
|
||||||
|
|
||||||
tt
|
|
||||||
{
|
|
||||||
font-size: 10pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr
|
|
||||||
{
|
|
||||||
border: 0;
|
|
||||||
color: black;
|
|
||||||
background-color: black;
|
|
||||||
height: 1px;
|
|
||||||
margin-top: 20pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote
|
|
||||||
{
|
|
||||||
padding-top: 0;
|
|
||||||
padding-bottom: 0;
|
|
||||||
padding-right: 0;
|
|
||||||
padding-left: 20pt;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#boost_logo
|
|
||||||
{
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
|
|
||||||
#footer
|
|
||||||
{
|
|
||||||
margin-top:20pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo_pic
|
|
||||||
{
|
|
||||||
border:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo
|
|
||||||
{
|
|
||||||
float:right;
|
|
||||||
margin-left: 6pt;
|
|
||||||
margin-right: -4pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
.body-0
|
|
||||||
{
|
|
||||||
min-width: 40em;
|
|
||||||
padding-left: 30px;
|
|
||||||
background: url(shade-l.png) repeat-y left;
|
|
||||||
}
|
|
||||||
.body-1
|
|
||||||
{
|
|
||||||
padding-right: 30px;
|
|
||||||
background: url(shade-r.png) repeat-y right;
|
|
||||||
}
|
|
||||||
.body-2
|
|
||||||
{
|
|
||||||
background-color: white;
|
|
||||||
padding: 0 8pt 0 8pt;
|
|
||||||
margin-left: 0;
|
|
||||||
border-top: solid 2.5pt #717171;
|
|
||||||
border-bottom: solid 3pt #717171;
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
|
|
||||||
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
|
|
||||||
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
|
|
||||||
<title>throw_exception</title>
|
|
||||||
<link href='reno.css' type='text/css' rel='stylesheet'/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="body-0">
|
|
||||||
<div class="body-1">
|
|
||||||
<div class="body-2">
|
|
||||||
<div>
|
|
||||||
<div id="boost_logo">
|
|
||||||
<a href="http://www.boost.org"><img style="border:0" src="../../../boost.png" alt="Boost" width="277" height="86"/></a>
|
|
||||||
</div>
|
|
||||||
<h1>Boost Exception</h1>
|
|
||||||
</div>
|
|
||||||
<!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
|
|
||||||
<!-- 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) -->
|
|
||||||
<div class="RenoIncludeDIV"><div class="RenoAutoDIV"><h3>throw_exception</h3>
|
|
||||||
</div>
|
|
||||||
<div class="RenoIncludeDIV"><p><span class="RenoEscape">#<!--<wiki>`#</wiki>--></span>include <<span class="RenoLink"><a href="boost_throw_exception_hpp.html">boost/throw_exception.hpp</a></span>></p>
|
|
||||||
<pre>namespace
|
|
||||||
boost
|
|
||||||
{
|
|
||||||
<span class="RenoIncludeSPAN">#ifdef BOOST_NO_EXCEPTIONS
|
|
||||||
void <span class="RenoLink">throw_exception</span>( std::exception const & e ); // user defined
|
|
||||||
#else
|
|
||||||
template <class E>
|
|
||||||
void <span class="RenoLink">throw_exception</span>( E const & e );
|
|
||||||
#endif</span>
|
|
||||||
}</pre>
|
|
||||||
</div><h4>Effects:</h4>
|
|
||||||
<div><ul><li> If BOOST_NO_EXCEPTIONS is not defined, boost::<span class="RenoLink">throw_exception</span>(e) throws an exception of unspecified type that derives publicly from E and from boost::<span class="RenoLink"><a href="exception.html">exception</a></span>.</li>
|
|
||||||
<li> If BOOST_NO_EXCEPTIONS is defined, the function is left undefined, and the user is expected to supply an appropriate definition. Callers of <span class="RenoLink">throw_exception</span> are allowed to assume that the function never returns; therefore, if the user-defined <span class="RenoLink">throw_exception</span> returns, the behavior is undefined.</li>
|
|
||||||
</ul></div>
|
|
||||||
<h4>Requirements:</h4>
|
|
||||||
<p>E must derive publicly from std::exception. E may or may not derive from boost::<span class="RenoLink"><a href="exception.html">exception</a></span>.</p>
|
|
||||||
<h4>Notes:</h4>
|
|
||||||
<div><ul><li> The emitted exception can be intercepted as E &, std::exception &, or boost::exception &.</li>
|
|
||||||
<li> The emitted exception supports boost::<span class="RenoLink"><a href="exception_ptr.html">exception_ptr</a></span>.</li>
|
|
||||||
<li> If BOOST_EXCEPTION_DISABLE is defined and BOOST_NO_EXCEPTIONS is not defined, boost::<span class="RenoLink">throw_exception</span>(e) equivalent to throw e.</li>
|
|
||||||
</ul></div>
|
|
||||||
</div><div class="RenoAutoDIV"><div class="RenoHR"><hr/></div>
|
|
||||||
See also: <span class="RenoPageList"><a href="BOOST_THROW_EXCEPTION.html">BOOST_THROW_EXCEPTION</a> | <a href="boost-exception.html">Boost Exception</a> | <a href="boost_throw_exception_hpp.html">boost/throw_exception.hpp</a> | <a href="configuration_macros.html">Configuration Macros</a> | <a href="enable_current_exception.html">enable_current_exception</a> | <a href="frequently_asked_questions.html">Frequently Asked Questions</a> | <a href="tutorial_exception_ptr.html">Transporting of Exceptions Between Threads</a></span>
|
|
||||||
</div>
|
|
||||||
<!-- Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. -->
|
|
||||||
<!-- 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) -->
|
|
||||||
<div id="footer">
|
|
||||||
<p>
|
|
||||||
<a class="logo" href="http://jigsaw.w3.org/css-validator/check/referer"><img class="logo_pic" src="valid-css.png" alt="Valid CSS" height="31" width="88"/></a>
|
|
||||||
<a class="logo" href="http://validator.w3.org/check?uri=referer"><img class="logo_pic" src="valid-xhtml.png" alt="Valid XHTML 1.0" height="31" width="88"/></a>
|
|
||||||
<small>Copyright (c) 2006-2009 by Emil Dotchevski and Reverge Studios, Inc.<br/>
|
|
||||||
Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</small>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.7 KiB |
@ -3,8 +3,8 @@
|
|||||||
//Distributed under the Boost Software License, Version 1.0. (See accompanying
|
//Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593
|
#ifndef BOOST_EXCEPTION_274DA366004E11DCB1DDFE2E56D89593
|
||||||
#define UUID_274DA366004E11DCB1DDFE2E56D89593
|
#define BOOST_EXCEPTION_274DA366004E11DCB1DDFE2E56D89593
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
@ -21,6 +21,7 @@ namespace boost { namespace exception_detail { using boost::shared_ptr; } }
|
|||||||
#endif
|
#endif
|
||||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||||
#pragma warning(push,1)
|
#pragma warning(push,1)
|
||||||
|
#pragma warning(disable: 4265)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@ -165,7 +166,7 @@ boost
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
~error_info_container() throw()
|
~error_info_container() BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -233,7 +234,7 @@ boost
|
|||||||
#ifdef __HP_aCC
|
#ifdef __HP_aCC
|
||||||
//On HP aCC, this protected copy constructor prevents throwing boost::exception.
|
//On HP aCC, this protected copy constructor prevents throwing boost::exception.
|
||||||
//On all other platforms, the same effect is achieved by the pure virtual destructor.
|
//On all other platforms, the same effect is achieved by the pure virtual destructor.
|
||||||
exception( exception const & x ) throw():
|
exception( exception const & x ) BOOST_NOEXCEPT_OR_NOTHROW:
|
||||||
data_(x.data_),
|
data_(x.data_),
|
||||||
throw_function_(x.throw_function_),
|
throw_function_(x.throw_function_),
|
||||||
throw_file_(x.throw_file_),
|
throw_file_(x.throw_file_),
|
||||||
@ -242,7 +243,7 @@ boost
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
virtual ~exception() throw()
|
virtual ~exception() BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
#ifndef __HP_aCC
|
#ifndef __HP_aCC
|
||||||
= 0 //Workaround for HP aCC, =0 incorrectly leads to link errors.
|
= 0 //Workaround for HP aCC, =0 incorrectly leads to link errors.
|
||||||
#endif
|
#endif
|
||||||
@ -287,7 +288,7 @@ boost
|
|||||||
|
|
||||||
inline
|
inline
|
||||||
exception::
|
exception::
|
||||||
~exception() throw()
|
~exception() BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,7 +338,7 @@ boost
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~error_info_injector() throw()
|
~error_info_injector() BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -398,7 +399,7 @@ boost
|
|||||||
virtual void rethrow() const = 0;
|
virtual void rethrow() const = 0;
|
||||||
|
|
||||||
virtual
|
virtual
|
||||||
~clone_base() throw()
|
~clone_base() BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -445,7 +446,7 @@ boost
|
|||||||
copy_boost_exception(this,&x);
|
copy_boost_exception(this,&x);
|
||||||
}
|
}
|
||||||
|
|
||||||
~clone_impl() throw()
|
~clone_impl() BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,54 +473,10 @@ boost
|
|||||||
{
|
{
|
||||||
return exception_detail::clone_impl<T>(x);
|
return exception_detail::clone_impl<T>(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
BOOST_SYMBOL_VISIBLE
|
|
||||||
wrapexcept:
|
|
||||||
public exception_detail::clone_impl<typename exception_detail::enable_error_info_return_type<T>::type>
|
|
||||||
{
|
|
||||||
typedef exception_detail::clone_impl<typename exception_detail::enable_error_info_return_type<T>::type> base_type;
|
|
||||||
public:
|
|
||||||
explicit
|
|
||||||
wrapexcept( typename exception_detail::enable_error_info_return_type<T>::type const & x ):
|
|
||||||
base_type( x )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
~wrapexcept() throw()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace
|
|
||||||
exception_detail
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
remove_error_info_injector
|
|
||||||
{
|
|
||||||
typedef T type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
remove_error_info_injector< error_info_injector<T> >
|
|
||||||
{
|
|
||||||
typedef T type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
inline
|
|
||||||
wrapexcept<typename remove_error_info_injector<T>::type>
|
|
||||||
enable_both( T const & x )
|
|
||||||
{
|
|
||||||
return wrapexcept<typename remove_error_info_injector<T>::type>( enable_error_info( x ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
#endif // #ifndef BOOST_EXCEPTION_274DA366004E11DCB1DDFE2E56D89593
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef UUID_AA15E74A856F11E08B8D93F24824019B
|
#ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED
|
||||||
#define UUID_AA15E74A856F11E08B8D93F24824019B
|
#define BOOST_THROW_EXCEPTION_HPP_INCLUDED
|
||||||
|
|
||||||
// MS compatible compilers support #pragma once
|
// MS compatible compilers support #pragma once
|
||||||
|
|
||||||
@ -10,94 +10,173 @@
|
|||||||
//
|
//
|
||||||
// boost/throw_exception.hpp
|
// boost/throw_exception.hpp
|
||||||
//
|
//
|
||||||
// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
|
// Copyright (c) 2002, 2018, 2019 Peter Dimov
|
||||||
// Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc.
|
// Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc.
|
||||||
//
|
//
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
// Distributed under the Boost Software License, Version 1.0. (See
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
// accompanying file LICENSE_1_0.txt or copy at
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
// http://www.boost.org/libs/utility/throw_exception.html
|
// http://www.boost.org/libs/throw_exception
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <boost/assert/source_location.hpp>
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
#include <boost/detail/workaround.hpp>
|
#include <boost/config/workaround.hpp>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
|
||||||
#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) )
|
#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) )
|
||||||
# define BOOST_EXCEPTION_DISABLE
|
# define BOOST_EXCEPTION_DISABLE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1310 )
|
namespace boost
|
||||||
# define BOOST_EXCEPTION_DISABLE
|
{
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined( BOOST_EXCEPTION_DISABLE )
|
// All boost exceptions are required to derive from std::exception,
|
||||||
# include <boost/exception/exception.hpp>
|
// to ensure compatibility with BOOST_NO_EXCEPTIONS.
|
||||||
#if !defined(BOOST_THROW_EXCEPTION_CURRENT_FUNCTION)
|
|
||||||
# include <boost/current_function.hpp>
|
|
||||||
# define BOOST_THROW_EXCEPTION_CURRENT_FUNCTION BOOST_CURRENT_FUNCTION
|
|
||||||
#endif
|
|
||||||
# define BOOST_THROW_EXCEPTION(x) ::boost::exception_detail::throw_exception_(x,BOOST_THROW_EXCEPTION_CURRENT_FUNCTION,__FILE__,__LINE__)
|
|
||||||
#else
|
|
||||||
# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__GNUC__) && (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
inline void throw_exception_assert_compatibility( std::exception const & ) {}
|
||||||
#pragma GCC system_header
|
|
||||||
#endif
|
} // namespace boost
|
||||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
|
||||||
#pragma warning(push,1)
|
#if defined( BOOST_NO_EXCEPTIONS )
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
{
|
{
|
||||||
#ifdef BOOST_NO_EXCEPTIONS
|
|
||||||
|
|
||||||
void throw_exception( std::exception const & e ); // user defined
|
BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined
|
||||||
|
BOOST_NORETURN void throw_exception( std::exception const & e, boost::source_location const & loc ); // user defined
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#elif defined( BOOST_EXCEPTION_DISABLE )
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e )
|
||||||
|
{
|
||||||
|
throw_exception_assert_compatibility( e );
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e, boost::source_location const & )
|
||||||
|
{
|
||||||
|
throw_exception_assert_compatibility( e );
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#else // !defined( BOOST_NO_EXCEPTIONS ) && !defined( BOOST_EXCEPTION_DISABLE )
|
||||||
|
|
||||||
|
#include <boost/exception/exception.hpp>
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
|
||||||
|
// boost::wrapexcept<E>
|
||||||
|
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
|
||||||
|
typedef char (&wrapexcept_s1)[ 1 ];
|
||||||
|
typedef char (&wrapexcept_s2)[ 2 ];
|
||||||
|
|
||||||
|
template<class T> wrapexcept_s1 wrapexcept_is_convertible( T* );
|
||||||
|
template<class T> wrapexcept_s2 wrapexcept_is_convertible( void* );
|
||||||
|
|
||||||
|
template<class E, class B, int I = sizeof( wrapexcept_is_convertible<B>( static_cast< E* >( 0 ) ) ) > struct wrapexcept_add_base;
|
||||||
|
|
||||||
|
template<class E, class B> struct wrapexcept_add_base<E, B, 1>
|
||||||
|
{
|
||||||
|
struct type {};
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class E, class B> struct wrapexcept_add_base<E, B, 2>
|
||||||
|
{
|
||||||
|
typedef B type;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
|
template<class E> struct BOOST_SYMBOL_VISIBLE wrapexcept:
|
||||||
|
public detail::wrapexcept_add_base<E, boost::exception_detail::clone_base>::type,
|
||||||
|
public E,
|
||||||
|
public detail::wrapexcept_add_base<E, boost::exception>::type
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
struct deleter
|
||||||
|
{
|
||||||
|
wrapexcept * p_;
|
||||||
|
~deleter() { delete p_; }
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void copy_from( void const* )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void copy_from( boost::exception const* p )
|
||||||
|
{
|
||||||
|
static_cast<boost::exception&>( *this ) = *p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
explicit wrapexcept( E const & e ): E( e )
|
||||||
|
{
|
||||||
|
copy_from( &e );
|
||||||
|
}
|
||||||
|
|
||||||
|
explicit wrapexcept( E const & e, boost::source_location const & loc ): E( e )
|
||||||
|
{
|
||||||
|
copy_from( &e );
|
||||||
|
|
||||||
|
set_info( *this, throw_file( loc.file_name() ) );
|
||||||
|
set_info( *this, throw_line( loc.line() ) );
|
||||||
|
set_info( *this, throw_function( loc.function_name() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual boost::exception_detail::clone_base const * clone() const
|
||||||
|
{
|
||||||
|
wrapexcept * p = new wrapexcept( *this );
|
||||||
|
deleter del = { p };
|
||||||
|
|
||||||
|
boost::exception_detail::copy_boost_exception( p, this );
|
||||||
|
|
||||||
|
del.p_ = 0;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void rethrow() const
|
||||||
|
{
|
||||||
|
throw *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// boost::throw_exception
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e )
|
||||||
|
{
|
||||||
|
throw_exception_assert_compatibility( e );
|
||||||
|
throw wrapexcept<E>( e );
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class E> BOOST_NORETURN void throw_exception( E const & e, boost::source_location const & loc )
|
||||||
|
{
|
||||||
|
throw_exception_assert_compatibility( e );
|
||||||
|
throw wrapexcept<E>( e, loc );
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
inline void throw_exception_assert_compatibility( std::exception const & ) { }
|
|
||||||
|
|
||||||
template<class E> BOOST_NORETURN inline void throw_exception( E const & e )
|
|
||||||
{
|
|
||||||
//All boost exceptions are required to derive from std::exception,
|
|
||||||
//to ensure compatibility with BOOST_NO_EXCEPTIONS.
|
|
||||||
throw_exception_assert_compatibility(e);
|
|
||||||
|
|
||||||
#ifndef BOOST_EXCEPTION_DISABLE
|
|
||||||
throw exception_detail::enable_both( e );
|
|
||||||
#else
|
|
||||||
throw e;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined( BOOST_EXCEPTION_DISABLE )
|
|
||||||
namespace
|
|
||||||
exception_detail
|
|
||||||
{
|
|
||||||
template <class E>
|
|
||||||
BOOST_NORETURN
|
|
||||||
void
|
|
||||||
throw_exception_( E const & x, char const * current_function, char const * file, int line )
|
|
||||||
{
|
|
||||||
boost::throw_exception(
|
|
||||||
set_info(
|
|
||||||
set_info(
|
|
||||||
set_info(
|
|
||||||
enable_error_info(x),
|
|
||||||
throw_function(current_function)),
|
|
||||||
throw_file(file)),
|
|
||||||
throw_line(line)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
|
||||||
#pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// BOOST_THROW_EXCEPTION
|
||||||
|
|
||||||
|
#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x, BOOST_CURRENT_LOCATION)
|
||||||
|
|
||||||
|
#endif // #ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv=refresh content="0; URL=../exception/doc/boost_throw_exception_hpp.html">
|
<meta http-equiv=refresh content="0; URL=doc/html/throw_exception.html">
|
||||||
<title>Automatic redirection</title>
|
<title>Automatic redirection</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
Automatic redirection failed, please go to
|
Automatic redirection failed, please go to
|
||||||
<a href="../exception/doc/boost_throw_exception_hpp.html">boost_throw_exception_hpp.html</a>. <hr>
|
<a href="doc/html/throw_exception.html">throw_exception.html</a>. <hr>
|
||||||
<p>© Copyright Beman Dawes, 2001</p>
|
<p>Copyright Beman Dawes, 2001</p>
|
||||||
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying
|
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy
|
file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy
|
||||||
at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
|
at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
|
||||||
|
@ -2,10 +2,12 @@
|
|||||||
"key": "throw_exception",
|
"key": "throw_exception",
|
||||||
"name": "ThrowException",
|
"name": "ThrowException",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Emil Dotchevski"
|
"Emil Dotchevski",
|
||||||
|
"Peter Dimov"
|
||||||
],
|
],
|
||||||
"maintainers": [
|
"maintainers": [
|
||||||
"Emil Dotchevski <emil -at- revergestudios.com>"
|
"Emil Dotchevski <emil -at- revergestudios.com>",
|
||||||
|
"Peter Dimov <pdimov -at- pdimov.com>"
|
||||||
],
|
],
|
||||||
"description": "A common infrastructure for throwing exceptions from Boost libraries.",
|
"description": "A common infrastructure for throwing exceptions from Boost libraries.",
|
||||||
"category": [
|
"category": [
|
||||||
|
17
test/CMakeLists.txt
Normal file
17
test/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Copyright 2018, 2019 Peter Dimov
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
include(BoostTestJamfile OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST)
|
||||||
|
|
||||||
|
if(HAVE_BOOST_TEST)
|
||||||
|
|
||||||
|
boost_test_jamfile(FILE Jamfile.v2 LINK_LIBRARIES Boost::throw_exception Boost::core Boost::exception)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#run throw_from_library_test.cpp lib1_throw lib2_throw lib3_throw : : : <link>static : throw_from_library_static ;
|
||||||
|
#run throw_from_library_test.cpp lib1_throw lib2_throw lib3_throw : : : <link>shared : throw_from_library_shared ;
|
||||||
|
|
||||||
|
#run throw_exception_nx_test.cpp : : : <exception-handling>off ;
|
||||||
|
#run throw_exception_nx_test2.cpp : : : <exception-handling>off ;
|
@ -1,22 +1,32 @@
|
|||||||
# Boost Exception Library test Jamfile
|
# Boost ThrowException Library test Jamfile
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
|
# Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
|
||||||
|
# Copyright 2019 Peter Dimov
|
||||||
#
|
#
|
||||||
# Distributed under the Boost Software License, Version 1.0. (See accompanying
|
# Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
import testing ;
|
import testing ;
|
||||||
|
|
||||||
|
project : requirements
|
||||||
|
<warnings>extra
|
||||||
|
<toolset>msvc:<warnings-as-errors>on
|
||||||
|
<toolset>clang:<warnings-as-errors>on
|
||||||
|
<toolset>gcc:<warnings-as-errors>on
|
||||||
|
<toolset>gcc:<cxxflags>-Wshadow ;
|
||||||
|
|
||||||
run throw_exception_test.cpp ;
|
run throw_exception_test.cpp ;
|
||||||
run throw_exception_no_exceptions_test.cpp ;
|
run throw_exception_no_exceptions_test.cpp ;
|
||||||
run throw_exception_no_integration_test.cpp ;
|
run throw_exception_no_integration_test.cpp ;
|
||||||
run throw_exception_no_both_test.cpp ;
|
run throw_exception_no_both_test.cpp ;
|
||||||
|
|
||||||
compile-fail throw_exception_fail.cpp ;
|
compile-fail throw_exception_fail.cpp
|
||||||
|
: <warnings-as-errors>off ;
|
||||||
|
|
||||||
run throw_exception_test2.cpp ;
|
run throw_exception_test2.cpp ;
|
||||||
run throw_exception_test3.cpp ;
|
run throw_exception_test3.cpp ;
|
||||||
run throw_exception_test4.cpp ;
|
run throw_exception_test4.cpp ;
|
||||||
|
run throw_exception_test5.cpp ;
|
||||||
|
|
||||||
lib lib1_throw : lib1_throw.cpp : <define>LIB1_SOURCE=1 <link>shared:<define>LIB1_DYN_LINK=1 : : <link>shared:<define>LIB1_DYN_LINK=1 ;
|
lib lib1_throw : lib1_throw.cpp : <define>LIB1_SOURCE=1 <link>shared:<define>LIB1_DYN_LINK=1 : : <link>shared:<define>LIB1_DYN_LINK=1 ;
|
||||||
lib lib2_throw : lib2_throw.cpp : <define>LIB2_SOURCE=1 <link>shared:<define>LIB2_DYN_LINK=1 : : <link>shared:<define>LIB2_DYN_LINK=1 ;
|
lib lib2_throw : lib2_throw.cpp : <define>LIB2_SOURCE=1 <link>shared:<define>LIB2_DYN_LINK=1 : : <link>shared:<define>LIB2_DYN_LINK=1 ;
|
||||||
@ -24,3 +34,6 @@ lib lib3_throw : lib3_throw.cpp : <define>LIB3_SOURCE=1 <link>shared:<define>LIB
|
|||||||
|
|
||||||
run throw_from_library_test.cpp lib1_throw lib2_throw lib3_throw : : : <link>static : throw_from_library_static ;
|
run throw_from_library_test.cpp lib1_throw lib2_throw lib3_throw : : : <link>static : throw_from_library_static ;
|
||||||
run throw_from_library_test.cpp lib1_throw lib2_throw lib3_throw : : : <link>shared : throw_from_library_shared ;
|
run throw_from_library_test.cpp lib1_throw lib2_throw lib3_throw : : : <link>shared : throw_from_library_shared ;
|
||||||
|
|
||||||
|
run throw_exception_nx_test.cpp : : : <exception-handling>off ;
|
||||||
|
run throw_exception_nx_test2.cpp : : : <exception-handling>off ;
|
||||||
|
17
test/cmake_install_test/CMakeLists.txt
Normal file
17
test/cmake_install_test/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Copyright 2018 Peter Dimov
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.5...3.16)
|
||||||
|
|
||||||
|
project(cmake_install_test LANGUAGES CXX)
|
||||||
|
|
||||||
|
find_package(boost_throw_exception REQUIRED)
|
||||||
|
|
||||||
|
add_executable(main main.cpp)
|
||||||
|
target_link_libraries(main Boost::throw_exception)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
add_test(NAME main COMMAND main)
|
||||||
|
|
||||||
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)
|
19
test/cmake_install_test/main.cpp
Normal file
19
test/cmake_install_test/main.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2019 Peter Dimov
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boost::throw_exception( std::runtime_error( "" ) );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
catch( std::runtime_error const& )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
19
test/cmake_subdir_test/CMakeLists.txt
Normal file
19
test/cmake_subdir_test/CMakeLists.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Copyright 2018 Peter Dimov
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.5...3.16)
|
||||||
|
|
||||||
|
project(cmake_subdir_test LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_subdirectory(../../../assert boostorg/assert)
|
||||||
|
add_subdirectory(../../../config boostorg/config)
|
||||||
|
add_subdirectory(../../../throw_exception boostorg/throw_exception)
|
||||||
|
|
||||||
|
add_executable(main main.cpp)
|
||||||
|
target_link_libraries(main Boost::throw_exception)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
add_test(NAME main COMMAND main)
|
||||||
|
|
||||||
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)
|
19
test/cmake_subdir_test/main.cpp
Normal file
19
test/cmake_subdir_test/main.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2019 Peter Dimov
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boost::throw_exception( std::runtime_error( "" ) );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
catch( std::runtime_error const& )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -5,27 +5,28 @@
|
|||||||
|
|
||||||
#define BOOST_NO_EXCEPTIONS
|
#define BOOST_NO_EXCEPTIONS
|
||||||
#define BOOST_EXCEPTION_DISABLE
|
#define BOOST_EXCEPTION_DISABLE
|
||||||
|
|
||||||
#include <boost/throw_exception.hpp>
|
#include <boost/throw_exception.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <cstdlib>
|
||||||
|
|
||||||
class my_exception: public std::exception { };
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
bool called=false;
|
class my_exception: public std::exception {};
|
||||||
|
|
||||||
namespace
|
int main()
|
||||||
boost
|
{
|
||||||
{
|
boost::throw_exception( my_exception() );
|
||||||
void
|
return 1;
|
||||||
throw_exception( std::exception const & )
|
}
|
||||||
{
|
|
||||||
called=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
namespace boost
|
||||||
main()
|
{
|
||||||
{
|
|
||||||
boost::throw_exception(my_exception());
|
void throw_exception( std::exception const & )
|
||||||
BOOST_TEST(called);
|
{
|
||||||
return boost::report_errors();
|
std::exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
@ -4,27 +4,28 @@
|
|||||||
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#define BOOST_NO_EXCEPTIONS
|
#define BOOST_NO_EXCEPTIONS
|
||||||
|
|
||||||
#include <boost/throw_exception.hpp>
|
#include <boost/throw_exception.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <cstdlib>
|
||||||
|
|
||||||
class my_exception: public std::exception { };
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
bool called=false;
|
class my_exception: public std::exception {};
|
||||||
|
|
||||||
namespace
|
int main()
|
||||||
boost
|
{
|
||||||
{
|
boost::throw_exception( my_exception() );
|
||||||
void
|
return 1;
|
||||||
throw_exception( std::exception const & )
|
}
|
||||||
{
|
|
||||||
called=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
namespace boost
|
||||||
main()
|
{
|
||||||
{
|
|
||||||
boost::throw_exception(my_exception());
|
void throw_exception( std::exception const & )
|
||||||
BOOST_TEST(called);
|
{
|
||||||
return boost::report_errors();
|
std::exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
@ -5,7 +5,11 @@
|
|||||||
|
|
||||||
#define BOOST_EXCEPTION_DISABLE
|
#define BOOST_EXCEPTION_DISABLE
|
||||||
#include <boost/throw_exception.hpp>
|
#include <boost/throw_exception.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
class my_exception: public std::exception { };
|
class my_exception: public std::exception { };
|
||||||
|
|
||||||
|
29
test/throw_exception_nx_test.cpp
Normal file
29
test/throw_exception_nx_test.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Copyright 2019 Peter Dimov
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
# pragma warning(disable: 4577) // noexcept used without /EHsc
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
class my_exception: public std::exception {};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
boost::throw_exception( my_exception() );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
|
||||||
|
void throw_exception( std::exception const & )
|
||||||
|
{
|
||||||
|
std::exit( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace boost
|
35
test/throw_exception_nx_test2.cpp
Normal file
35
test/throw_exception_nx_test2.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2019 Peter Dimov
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
# pragma warning(disable: 4577) // noexcept used without /EHsc
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
class my_exception: public std::exception {};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception() );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
|
||||||
|
void throw_exception( std::exception const &, boost::source_location const & loc )
|
||||||
|
{
|
||||||
|
int r = 0;
|
||||||
|
|
||||||
|
if( std::strcmp( loc.file_name(), __FILE__ ) != 0 ) ++r;
|
||||||
|
if( loc.line() != 18 ) ++r;
|
||||||
|
|
||||||
|
std::exit( r );
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace boost
|
@ -4,10 +4,13 @@
|
|||||||
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#include <boost/throw_exception.hpp>
|
#include <boost/throw_exception.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
class my_exception: public std::exception { };
|
class my_exception: public std::exception { };
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -6,7 +6,11 @@
|
|||||||
// http://www.boost.org/LICENSE_1_0.txt
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
#include <boost/throw_exception.hpp>
|
#include <boost/throw_exception.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
class my_exception: public std::exception
|
class my_exception: public std::exception
|
||||||
{
|
{
|
||||||
@ -16,13 +20,19 @@ class my_exception2: public std::exception, public boost::exception
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class my_exception3: public std::exception, public virtual boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
BOOST_TEST_THROWS( boost::throw_exception( my_exception() ), boost::exception );
|
BOOST_TEST_THROWS( boost::throw_exception( my_exception() ), boost::exception );
|
||||||
BOOST_TEST_THROWS( boost::throw_exception( my_exception2() ), boost::exception );
|
BOOST_TEST_THROWS( boost::throw_exception( my_exception2() ), boost::exception );
|
||||||
|
BOOST_TEST_THROWS( boost::throw_exception( my_exception3() ), boost::exception );
|
||||||
|
|
||||||
BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception() ), boost::exception );
|
BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception() ), boost::exception );
|
||||||
BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception2() ), boost::exception );
|
BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception2() ), boost::exception );
|
||||||
|
BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception3() ), boost::exception );
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,21 @@
|
|||||||
// See accompanying file LICENSE_1_0.txt or copy at
|
// See accompanying file LICENSE_1_0.txt or copy at
|
||||||
// http://www.boost.org/LICENSE_1_0.txt
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
# pragma clang diagnostic ignored "-Wunknown-pragmas"
|
||||||
|
# pragma clang diagnostic ignored "-Wunknown-warning-option"
|
||||||
|
# pragma clang diagnostic ignored "-Wpotentially-evaluated-expression"
|
||||||
|
# pragma clang diagnostic ignored "-Wdelete-non-abstract-non-virtual-dtor"
|
||||||
|
# pragma clang diagnostic ignored "-Wunused-parameter"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <boost/throw_exception.hpp>
|
#include <boost/throw_exception.hpp>
|
||||||
#include <boost/exception_ptr.hpp>
|
#include <boost/exception_ptr.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
class my_exception: public std::exception
|
class my_exception: public std::exception
|
||||||
{
|
{
|
||||||
@ -17,6 +29,10 @@ class my_exception2: public std::exception, public boost::exception
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class my_exception3: public std::exception, public virtual boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -43,6 +59,18 @@ int main()
|
|||||||
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boost::throw_exception( my_exception3() );
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception3 );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BOOST_THROW_EXCEPTION( my_exception() );
|
BOOST_THROW_EXCEPTION( my_exception() );
|
||||||
@ -67,5 +95,17 @@ int main()
|
|||||||
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception3() );
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception3 );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,10 @@ class my_exception2: public std::exception, public boost::exception
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class my_exception3: public std::exception, public virtual boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -25,10 +29,26 @@ int main()
|
|||||||
}
|
}
|
||||||
catch( boost::exception const & x )
|
catch( boost::exception const & x )
|
||||||
{
|
{
|
||||||
int const * line = boost::get_error_info<boost::throw_line>( x );
|
{
|
||||||
|
char const * const * file = boost::get_error_info<boost::throw_file>( x );
|
||||||
|
|
||||||
BOOST_TEST( line != 0 );
|
BOOST_TEST( file != 0 );
|
||||||
BOOST_TEST_EQ( *line, 24 );
|
BOOST_TEST_CSTR_EQ( *file, __FILE__ );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int const * line = boost::get_error_info<boost::throw_line>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( line != 0 );
|
||||||
|
BOOST_TEST_EQ( *line, 28 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
char const * const * function = boost::get_error_info<boost::throw_function>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( function != 0 );
|
||||||
|
BOOST_TEST_CSTR_EQ( *function, BOOST_CURRENT_FUNCTION );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -37,10 +57,54 @@ int main()
|
|||||||
}
|
}
|
||||||
catch( boost::exception const & x )
|
catch( boost::exception const & x )
|
||||||
{
|
{
|
||||||
int const * line = boost::get_error_info<boost::throw_line>( x );
|
{
|
||||||
|
char const * const * file = boost::get_error_info<boost::throw_file>( x );
|
||||||
|
|
||||||
BOOST_TEST( line != 0 );
|
BOOST_TEST( file != 0 );
|
||||||
BOOST_TEST_EQ( *line, 36 );
|
BOOST_TEST_CSTR_EQ( *file, __FILE__ );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int const * line = boost::get_error_info<boost::throw_line>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( line != 0 );
|
||||||
|
BOOST_TEST_EQ( *line, 56 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
char const * const * function = boost::get_error_info<boost::throw_function>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( function != 0 );
|
||||||
|
BOOST_TEST_CSTR_EQ( *function, BOOST_CURRENT_FUNCTION );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception3() );
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
{
|
||||||
|
char const * const * file = boost::get_error_info<boost::throw_file>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( file != 0 );
|
||||||
|
BOOST_TEST_CSTR_EQ( *file, __FILE__ );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int const * line = boost::get_error_info<boost::throw_line>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( line != 0 );
|
||||||
|
BOOST_TEST_EQ( *line, 84 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
char const * const * function = boost::get_error_info<boost::throw_function>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( function != 0 );
|
||||||
|
BOOST_TEST_CSTR_EQ( *function, BOOST_CURRENT_FUNCTION );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
|
119
test/throw_exception_test5.cpp
Normal file
119
test/throw_exception_test5.cpp
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
// Copyright 2018, 2019 Peter Dimov
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
//
|
||||||
|
// See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
# pragma clang diagnostic ignored "-Wunknown-pragmas"
|
||||||
|
# pragma clang diagnostic ignored "-Wunknown-warning-option"
|
||||||
|
# pragma clang diagnostic ignored "-Wpotentially-evaluated-expression"
|
||||||
|
# pragma clang diagnostic ignored "-Wdelete-non-abstract-non-virtual-dtor"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <boost/exception/get_error_info.hpp>
|
||||||
|
#include <boost/exception/info.hpp>
|
||||||
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
typedef boost::error_info<struct tag_error_code, int> error_code;
|
||||||
|
typedef boost::error_info<struct tag_error_string, std::string> error_string;
|
||||||
|
|
||||||
|
class my_exception: public std::exception, public boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
class my_exception2: public std::exception, public virtual boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boost::throw_exception( my_exception() << error_code( 123 ) << error_string( "error%%string" ) );
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
{
|
||||||
|
int const * code = boost::get_error_info<error_code>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( code != 0 );
|
||||||
|
BOOST_TEST_EQ( *code, 123 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string const * str = boost::get_error_info<error_string>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( str != 0 );
|
||||||
|
BOOST_TEST_EQ( *str, "error%%string" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception() << error_code( 123 ) << error_string( "error%%string" ) );
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
{
|
||||||
|
int const * code = boost::get_error_info<error_code>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( code != 0 );
|
||||||
|
BOOST_TEST_EQ( *code, 123 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string const * str = boost::get_error_info<error_string>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( str != 0 );
|
||||||
|
BOOST_TEST_EQ( *str, "error%%string" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boost::throw_exception( my_exception2() << error_code( 123 ) << error_string( "error%%string" ) );
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
{
|
||||||
|
int const * code = boost::get_error_info<error_code>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( code != 0 );
|
||||||
|
BOOST_TEST_EQ( *code, 123 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string const * str = boost::get_error_info<error_string>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( str != 0 );
|
||||||
|
BOOST_TEST_EQ( *str, "error%%string" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception2() << error_code( 123 ) << error_string( "error%%string" ) );
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
{
|
||||||
|
int const * code = boost::get_error_info<error_code>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( code != 0 );
|
||||||
|
BOOST_TEST_EQ( *code, 123 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string const * str = boost::get_error_info<error_string>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( str != 0 );
|
||||||
|
BOOST_TEST_EQ( *str, "error%%string" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
@ -5,6 +5,18 @@
|
|||||||
// See accompanying file LICENSE_1_0.txt or copy at
|
// See accompanying file LICENSE_1_0.txt or copy at
|
||||||
// http://www.boost.org/LICENSE_1_0.txt
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
# pragma clang diagnostic ignored "-Wunknown-pragmas"
|
||||||
|
# pragma clang diagnostic ignored "-Wunknown-warning-option"
|
||||||
|
# pragma clang diagnostic ignored "-Wpotentially-evaluated-expression"
|
||||||
|
# pragma clang diagnostic ignored "-Wdelete-non-abstract-non-virtual-dtor"
|
||||||
|
# pragma clang diagnostic ignored "-Wunused-parameter"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "lib1_throw.hpp"
|
#include "lib1_throw.hpp"
|
||||||
#include "lib2_throw.hpp"
|
#include "lib2_throw.hpp"
|
||||||
#include "lib3_throw.hpp"
|
#include "lib3_throw.hpp"
|
||||||
|
Reference in New Issue
Block a user