mirror of
https://github.com/boostorg/throw_exception.git
synced 2025-06-29 05:50:59 +02:00
Compare commits
30 Commits
exception_
...
feature/mo
Author | SHA1 | Date | |
---|---|---|---|
9b99dd5f60 | |||
a732dfad3c | |||
6845ba892d | |||
a17f4bad42 | |||
c807ae9201 | |||
fe0f62bf17 | |||
4714760035 | |||
72564448cf | |||
7e2f1b4ecd | |||
9d43946812 | |||
ca46976908 | |||
2fdcaa3be1 | |||
3fba666bea | |||
376fc078b5 | |||
614cbc4f34 | |||
ee45839a78 | |||
e3b556a978 | |||
8b879067f7 | |||
940df3e051 | |||
4fd6f2aa0e | |||
aec4ca6914 | |||
10f3663798 | |||
f796dd892a | |||
f5022b5ca8 | |||
a0ca8113fd | |||
cce19ef60f | |||
c548923b32 | |||
fc1ca8aef6 | |||
c89a2db112 | |||
f52e2fe315 |
281
.travis.yml
Normal file
281
.travis.yml
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
# Copyright 2016-2018 Peter Dimov
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
language: cpp
|
||||||
|
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
python: "2.7"
|
||||||
|
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- /feature\/.*/
|
||||||
|
|
||||||
|
env:
|
||||||
|
matrix:
|
||||||
|
- BOGUS_JOB=true
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- env: BOGUS_JOB=true
|
||||||
|
|
||||||
|
include:
|
||||||
|
- os: linux
|
||||||
|
compiler: g++
|
||||||
|
env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.4
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-4.4 CXXSTD=98,0x
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.4
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.6
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-4.6 CXXSTD=03,0x
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.6
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.7
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=03,11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.8
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=03,11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-4.9
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=03,11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-4.9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-5
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-5
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-6
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-6
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-7
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11,14,17
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-8
|
||||||
|
env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11,14,17
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-8
|
||||||
|
env: UBSAN=1 TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11,14,17 UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++
|
||||||
|
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: /usr/bin/clang++
|
||||||
|
env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.3
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: /usr/bin/clang++
|
||||||
|
env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.4
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.5
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.5
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.6
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.6
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.8
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.8
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.9
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.9
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-4.0
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-4.0
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-4.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-5.0
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
- libstdc++-4.9-dev
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-6.0
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=03,11,14,17
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-6.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-6.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-6.0
|
||||||
|
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=03,11,14,17 UBSAN_OPTIONS=print_stacktrace=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-6.0
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-6.0
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-libc++
|
||||||
|
env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- libc++-dev
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-libc++
|
||||||
|
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- libc++-dev
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
compiler: clang++
|
||||||
|
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
|
||||||
|
|
||||||
|
install:
|
||||||
|
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
|
||||||
|
- cd ..
|
||||||
|
- git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||||
|
- cd boost-root
|
||||||
|
- git submodule update --init tools/build
|
||||||
|
- git submodule update --init libs/config
|
||||||
|
- git submodule update --init tools/boostdep
|
||||||
|
- cp -r $TRAVIS_BUILD_DIR/* libs/throw_exception
|
||||||
|
- python tools/boostdep/depinst/depinst.py throw_exception
|
||||||
|
- ./bootstrap.sh
|
||||||
|
- ./b2 headers
|
||||||
|
|
||||||
|
script:
|
||||||
|
- |-
|
||||||
|
echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
|
||||||
|
- ./b2 -j 3 libs/throw_exception/test toolset=$TOOLSET cxxstd=$CXXSTD variant=debug,release ${UBSAN:+cxxflags=-fsanitize=undefined cxxflags=-fno-sanitize-recover=undefined linkflags=-fsanitize=undefined define=UBSAN=1 debug-symbols=on} ${LINKFLAGS:+linkflags=$LINKFLAGS}
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
email:
|
||||||
|
on_success: always
|
17
CMakeLists.txt
Normal file
17
CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Copyright 2018 Mike Dev
|
||||||
|
# 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)
|
||||||
|
project(BoostThrowException LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_library(boost_throw_exception INTERFACE)
|
||||||
|
add_library(Boost::throw_exception ALIAS boost_throw_exception)
|
||||||
|
|
||||||
|
target_include_directories(boost_throw_exception INTERFACE include)
|
||||||
|
|
||||||
|
target_link_libraries(boost_throw_exception
|
||||||
|
INTERFACE
|
||||||
|
Boost::assert
|
||||||
|
Boost::config
|
||||||
|
)
|
60
appveyor.yml
Normal file
60
appveyor.yml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# Copyright 2016-2018 Peter Dimov
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
version: 1.0.{build}-{branch}
|
||||||
|
|
||||||
|
shallow_clone: true
|
||||||
|
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- /feature\/.*/
|
||||||
|
|
||||||
|
environment:
|
||||||
|
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
|
||||||
|
TOOLSET: msvc-14.0
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
TOOLSET: msvc-14.1
|
||||||
|
CXXSTD: 14,17
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
ADDPATH: C:\cygwin\bin;
|
||||||
|
TOOLSET: gcc
|
||||||
|
CXXSTD: 03,11,14,1z
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
ADDPATH: C:\cygwin64\bin;
|
||||||
|
TOOLSET: gcc
|
||||||
|
CXXSTD: 03,11,14,1z
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
ADDPATH: C:\mingw\bin;
|
||||||
|
TOOLSET: gcc
|
||||||
|
CXXSTD: 03,11,14,1z
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
||||||
|
TOOLSET: gcc
|
||||||
|
CXXSTD: 03,11,14,1z
|
||||||
|
|
||||||
|
install:
|
||||||
|
- set BOOST_BRANCH=develop
|
||||||
|
- if "%APPVEYOR_REPO_BRANCH%" == "master" set BOOST_BRANCH=master
|
||||||
|
- cd ..
|
||||||
|
- git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||||
|
- cd boost-root
|
||||||
|
- git submodule update --init tools/build
|
||||||
|
- git submodule update --init libs/config
|
||||||
|
- git submodule update --init tools/boostdep
|
||||||
|
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\throw_exception
|
||||||
|
- python tools/boostdep/depinst/depinst.py throw_exception
|
||||||
|
- cmd /c bootstrap
|
||||||
|
- b2 -d0 headers
|
||||||
|
|
||||||
|
build: off
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
- PATH=%ADDPATH%%PATH%
|
||||||
|
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
||||||
|
- b2 -j 3 libs/throw_exception/test toolset=%TOOLSET% %CXXSTD%
|
@ -5,7 +5,18 @@
|
|||||||
|
|
||||||
#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593
|
#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593
|
||||||
#define UUID_274DA366004E11DCB1DDFE2E56D89593
|
#define UUID_274DA366004E11DCB1DDFE2E56D89593
|
||||||
#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_EXCEPTION_MINI_BOOST
|
||||||
|
#include <memory>
|
||||||
|
namespace boost { namespace exception_detail { using std::shared_ptr; } }
|
||||||
|
#else
|
||||||
|
namespace boost { template <class T> class shared_ptr; }
|
||||||
|
namespace boost { namespace exception_detail { using boost::shared_ptr; } }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
#endif
|
#endif
|
||||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||||
@ -23,25 +34,30 @@ boost
|
|||||||
refcount_ptr
|
refcount_ptr
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
refcount_ptr():
|
refcount_ptr():
|
||||||
px_(0)
|
px_(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~refcount_ptr()
|
~refcount_ptr()
|
||||||
{
|
{
|
||||||
release();
|
release();
|
||||||
}
|
}
|
||||||
|
|
||||||
refcount_ptr( refcount_ptr const & x ):
|
refcount_ptr( refcount_ptr const & x ):
|
||||||
px_(x.px_)
|
px_(x.px_)
|
||||||
{
|
{
|
||||||
add_ref();
|
add_ref();
|
||||||
}
|
}
|
||||||
|
|
||||||
refcount_ptr &
|
refcount_ptr &
|
||||||
operator=( refcount_ptr const & x )
|
operator=( refcount_ptr const & x )
|
||||||
{
|
{
|
||||||
adopt(x.px_);
|
adopt(x.px_);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
adopt( T * px )
|
adopt( T * px )
|
||||||
{
|
{
|
||||||
@ -49,19 +65,24 @@ boost
|
|||||||
px_=px;
|
px_=px;
|
||||||
add_ref();
|
add_ref();
|
||||||
}
|
}
|
||||||
|
|
||||||
T *
|
T *
|
||||||
get() const
|
get() const
|
||||||
{
|
{
|
||||||
return px_;
|
return px_;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
T * px_;
|
T * px_;
|
||||||
|
|
||||||
void
|
void
|
||||||
add_ref()
|
add_ref()
|
||||||
{
|
{
|
||||||
if( px_ )
|
if( px_ )
|
||||||
px_->add_ref();
|
px_->add_ref();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
release()
|
release()
|
||||||
{
|
{
|
||||||
@ -73,10 +94,13 @@ boost
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
template <class Tag,class T> class error_info;
|
template <class Tag,class T>
|
||||||
|
class error_info;
|
||||||
|
|
||||||
typedef error_info<struct throw_function_,char const *> throw_function;
|
typedef error_info<struct throw_function_,char const *> throw_function;
|
||||||
typedef error_info<struct throw_file_,char const *> throw_file;
|
typedef error_info<struct throw_file_,char const *> throw_file;
|
||||||
typedef error_info<struct throw_line_,int> throw_line;
|
typedef error_info<struct throw_line_,int> throw_line;
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
class
|
class
|
||||||
error_info<throw_function_,char const *>
|
error_info<throw_function_,char const *>
|
||||||
@ -90,6 +114,7 @@ boost
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
class
|
class
|
||||||
error_info<throw_file_,char const *>
|
error_info<throw_file_,char const *>
|
||||||
@ -103,6 +128,7 @@ boost
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
class
|
class
|
||||||
error_info<throw_line_,int>
|
error_info<throw_line_,int>
|
||||||
@ -117,61 +143,90 @@ boost
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
class
|
||||||
|
BOOST_SYMBOL_VISIBLE
|
||||||
#if defined(__GNUC__)
|
exception;
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility push (default)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
class exception;
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility pop
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
exception_detail
|
exception_detail
|
||||||
{
|
{
|
||||||
class error_info_base;
|
class error_info_base;
|
||||||
struct type_info_;
|
struct type_info_;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
error_info_container
|
error_info_container
|
||||||
{
|
{
|
||||||
|
virtual char const * diagnostic_information( char const * ) const = 0;
|
||||||
|
virtual shared_ptr<error_info_base> get( type_info_ const & ) const = 0;
|
||||||
|
virtual void set( shared_ptr<error_info_base> const &, type_info_ const & ) = 0;
|
||||||
virtual void add_ref() const = 0;
|
virtual void add_ref() const = 0;
|
||||||
virtual bool release() const = 0;
|
virtual bool release() const = 0;
|
||||||
virtual refcount_ptr<exception_detail::error_info_container> clone() const = 0;
|
virtual refcount_ptr<exception_detail::error_info_container> clone() const = 0;
|
||||||
virtual error_info_base * get( type_info_ const & ) const = 0;
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
~error_info_container() throw()
|
~error_info_container() throw()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
char const * & access_throw_function( exception const & );
|
|
||||||
char const * & access_throw_file( exception const & );
|
template <class>
|
||||||
int & access_throw_line( exception const & );
|
struct get_info;
|
||||||
error_info_container * get_error_info_container( exception const & );
|
|
||||||
|
template <>
|
||||||
|
struct get_info<throw_function>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct get_info<throw_file>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct get_info<throw_line>;
|
||||||
|
|
||||||
|
template <class>
|
||||||
|
struct set_info_rv;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct set_info_rv<throw_function>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct set_info_rv<throw_file>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct set_info_rv<throw_line>;
|
||||||
|
|
||||||
|
char const * get_diagnostic_information( exception const &, char const * );
|
||||||
|
|
||||||
void copy_boost_exception( exception *, exception const * );
|
void copy_boost_exception( exception *, exception const * );
|
||||||
class error_info_container_impl;
|
|
||||||
|
template <class E,class Tag,class T>
|
||||||
|
E const & set_info( E const &, error_info<Tag,T> const & );
|
||||||
|
|
||||||
|
template <class E>
|
||||||
|
E const & set_info( E const &, throw_function const & );
|
||||||
|
|
||||||
|
template <class E>
|
||||||
|
E const & set_info( E const &, throw_file const & );
|
||||||
|
|
||||||
|
template <class E>
|
||||||
|
E const & set_info( E const &, throw_line const & );
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility push (default)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
class
|
class
|
||||||
|
BOOST_SYMBOL_VISIBLE
|
||||||
exception
|
exception
|
||||||
{
|
{
|
||||||
|
//<N3757>
|
||||||
|
public:
|
||||||
|
template <class Tag> void set( typename Tag::type const & );
|
||||||
|
template <class Tag> typename Tag::type const * get() const;
|
||||||
|
//</N3757>
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
exception():
|
exception():
|
||||||
throw_function_(0),
|
throw_function_(0),
|
||||||
throw_file_(0),
|
throw_file_(0),
|
||||||
throw_line_(0)
|
throw_line_(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,23 +253,37 @@ boost
|
|||||||
#else
|
#else
|
||||||
private:
|
private:
|
||||||
|
|
||||||
friend char const * & exception_detail::access_throw_function( exception const & );
|
template <class E>
|
||||||
friend char const * & exception_detail::access_throw_file( exception const & );
|
friend E const & exception_detail::set_info( E const &, throw_function const & );
|
||||||
friend int & exception_detail::access_throw_line( exception const & );
|
|
||||||
friend exception_detail::error_info_container * exception_detail::get_error_info_container( exception const & );
|
template <class E>
|
||||||
|
friend E const & exception_detail::set_info( E const &, throw_file const & );
|
||||||
|
|
||||||
|
template <class E>
|
||||||
|
friend E const & exception_detail::set_info( E const &, throw_line const & );
|
||||||
|
|
||||||
|
template <class E,class Tag,class T>
|
||||||
|
friend E const & exception_detail::set_info( E const &, error_info<Tag,T> const & );
|
||||||
|
|
||||||
|
friend char const * exception_detail::get_diagnostic_information( exception const &, char const * );
|
||||||
|
|
||||||
|
template <class>
|
||||||
|
friend struct exception_detail::get_info;
|
||||||
|
friend struct exception_detail::get_info<throw_function>;
|
||||||
|
friend struct exception_detail::get_info<throw_file>;
|
||||||
|
friend struct exception_detail::get_info<throw_line>;
|
||||||
|
template <class>
|
||||||
|
friend struct exception_detail::set_info_rv;
|
||||||
|
friend struct exception_detail::set_info_rv<throw_function>;
|
||||||
|
friend struct exception_detail::set_info_rv<throw_file>;
|
||||||
|
friend struct exception_detail::set_info_rv<throw_line>;
|
||||||
friend void exception_detail::copy_boost_exception( exception *, exception const * );
|
friend void exception_detail::copy_boost_exception( exception *, exception const * );
|
||||||
friend class exception_detail::error_info_container_impl;
|
|
||||||
#endif
|
#endif
|
||||||
mutable exception_detail::refcount_ptr<exception_detail::error_info_container> data_;
|
mutable exception_detail::refcount_ptr<exception_detail::error_info_container> data_;
|
||||||
mutable char const * throw_function_;
|
mutable char const * throw_function_;
|
||||||
mutable char const * throw_file_;
|
mutable char const * throw_file_;
|
||||||
mutable int throw_line_;
|
mutable int throw_line_;
|
||||||
};
|
};
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility pop
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
exception::
|
exception::
|
||||||
@ -222,48 +291,30 @@ boost
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
exception_detail
|
exception_detail
|
||||||
{
|
{
|
||||||
inline
|
|
||||||
char const * &
|
|
||||||
access_throw_function( exception const & x )
|
|
||||||
{
|
|
||||||
return x.throw_function_;
|
|
||||||
}
|
|
||||||
inline
|
|
||||||
char const * &
|
|
||||||
access_throw_file( exception const & x )
|
|
||||||
{
|
|
||||||
return x.throw_file_;
|
|
||||||
}
|
|
||||||
inline
|
|
||||||
int &
|
|
||||||
access_throw_line( exception const & x )
|
|
||||||
{
|
|
||||||
return x.throw_line_;
|
|
||||||
}
|
|
||||||
template <class E>
|
template <class E>
|
||||||
E const &
|
E const &
|
||||||
set_info( E const & x, throw_function const & y )
|
set_info( E const & x, throw_function const & y )
|
||||||
{
|
{
|
||||||
access_throw_function(x)=y.v_;
|
x.throw_function_=y.v_;
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class E>
|
template <class E>
|
||||||
E const &
|
E const &
|
||||||
set_info( E const & x, throw_file const & y )
|
set_info( E const & x, throw_file const & y )
|
||||||
{
|
{
|
||||||
access_throw_file(x)=y.v_;
|
x.throw_file_=y.v_;
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class E>
|
template <class E>
|
||||||
E const &
|
E const &
|
||||||
set_info( E const & x, throw_line const & y )
|
set_info( E const & x, throw_line const & y )
|
||||||
{
|
{
|
||||||
access_throw_line(x)=y.v_;
|
x.throw_line_=y.v_;
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -273,12 +324,72 @@ boost
|
|||||||
namespace
|
namespace
|
||||||
exception_detail
|
exception_detail
|
||||||
{
|
{
|
||||||
#if defined(__GNUC__)
|
template <class T>
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
struct
|
||||||
# pragma GCC visibility push (default)
|
BOOST_SYMBOL_VISIBLE
|
||||||
# endif
|
error_info_injector:
|
||||||
#endif
|
public T,
|
||||||
|
public exception
|
||||||
|
{
|
||||||
|
explicit
|
||||||
|
error_info_injector( T const & x ):
|
||||||
|
T(x)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~error_info_injector() throw()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct large_size { char c[256]; };
|
||||||
|
large_size dispatch_boost_exception( exception const * );
|
||||||
|
|
||||||
|
struct small_size { };
|
||||||
|
small_size dispatch_boost_exception( void const * );
|
||||||
|
|
||||||
|
template <class,int>
|
||||||
|
struct enable_error_info_helper;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct
|
||||||
|
enable_error_info_helper<T,sizeof(large_size)>
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct
|
||||||
|
enable_error_info_helper<T,sizeof(small_size)>
|
||||||
|
{
|
||||||
|
typedef error_info_injector<T> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct
|
||||||
|
enable_error_info_return_type
|
||||||
|
{
|
||||||
|
typedef typename enable_error_info_helper<T,sizeof(exception_detail::dispatch_boost_exception(static_cast<T *>(0)))>::type type;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
inline
|
||||||
|
typename
|
||||||
|
exception_detail::enable_error_info_return_type<T>::type
|
||||||
|
enable_error_info( T const & x )
|
||||||
|
{
|
||||||
|
typedef typename exception_detail::enable_error_info_return_type<T>::type rt;
|
||||||
|
return rt(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
namespace
|
||||||
|
exception_detail
|
||||||
|
{
|
||||||
class
|
class
|
||||||
|
BOOST_SYMBOL_VISIBLE
|
||||||
clone_base
|
clone_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -291,11 +402,6 @@ boost
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility pop
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
void
|
void
|
||||||
@ -316,13 +422,9 @@ boost
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility push (default)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class
|
class
|
||||||
|
BOOST_SYMBOL_VISIBLE
|
||||||
clone_impl:
|
clone_impl:
|
||||||
public T,
|
public T,
|
||||||
public virtual clone_base
|
public virtual clone_base
|
||||||
@ -362,11 +464,6 @@ boost
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility pop
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline
|
inline
|
||||||
@ -375,137 +472,6 @@ boost
|
|||||||
{
|
{
|
||||||
return exception_detail::clone_impl<T>(x);
|
return exception_detail::clone_impl<T>(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility push (default)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
class
|
|
||||||
exception_info:
|
|
||||||
public exception
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual
|
|
||||||
~exception_info() throw() /*noexcept*/
|
|
||||||
{
|
|
||||||
}
|
|
||||||
exception_info() /*noexcept*/
|
|
||||||
{
|
|
||||||
}
|
|
||||||
exception_info( char const * file, int line, char const * function ) /*noexcept*/;
|
|
||||||
exception_info( exception_info const & r )
|
|
||||||
{
|
|
||||||
exception_detail::copy_boost_exception(this,&r);
|
|
||||||
}
|
|
||||||
exception_info( exception_info && ) /*noexcept*/;
|
|
||||||
exception_info & operator=( exception_info const & );
|
|
||||||
exception_info & operator=( exception_info && ) /*noexcept*/;
|
|
||||||
char const * file() const /*noexcept*/;
|
|
||||||
int line() const /*noexcept*/;
|
|
||||||
char const * function() const /*noexcept*/;
|
|
||||||
template <class Tag> exception_info & unset();
|
|
||||||
template <class Tag> exception_info & set( typename Tag::type const & );
|
|
||||||
template <class Tag> exception_info & set( typename Tag::type && );
|
|
||||||
template <class Tag> typename Tag::type const * get() const;
|
|
||||||
template <class Tag> typename Tag::type * get();
|
|
||||||
char const * diagnostic_info() const;
|
|
||||||
};
|
|
||||||
namespace
|
|
||||||
exception_detail
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
exception_info_injector:
|
|
||||||
T,
|
|
||||||
exception_info
|
|
||||||
{
|
|
||||||
explicit
|
|
||||||
exception_info_injector( T const & x ):
|
|
||||||
T(x)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
~exception_info_injector() throw()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility pop
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace
|
|
||||||
exception_detail
|
|
||||||
{
|
|
||||||
struct large_size { char c[256]; };
|
|
||||||
large_size dispatch_boost_exception( exception const * );
|
|
||||||
|
|
||||||
struct small_size { };
|
|
||||||
small_size dispatch_boost_exception( void const * );
|
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility push (default)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
exception_injector:
|
|
||||||
T,
|
|
||||||
exception_info
|
|
||||||
{
|
|
||||||
explicit
|
|
||||||
exception_injector( T const & x ):
|
|
||||||
T(x)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
~exception_injector() throw()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
|
||||||
# pragma GCC visibility pop
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template <class,int>
|
|
||||||
struct enable_error_info_helper;
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
enable_error_info_helper<T,sizeof(large_size)>
|
|
||||||
{
|
|
||||||
typedef T type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
enable_error_info_helper<T,sizeof(small_size)>
|
|
||||||
{
|
|
||||||
typedef exception_injector<T> type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct
|
|
||||||
enable_error_info_return_type
|
|
||||||
{
|
|
||||||
typedef typename enable_error_info_helper<T,sizeof(exception_detail::dispatch_boost_exception(static_cast<T *>(0)))>::type type;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
typename
|
|
||||||
exception_detail::enable_error_info_return_type<T>::type
|
|
||||||
enable_error_info( T const & x )
|
|
||||||
{
|
|
||||||
typedef typename exception_detail::enable_error_info_return_type<T>::type rt;
|
|
||||||
return rt(x);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||||
|
@ -1,15 +1,6 @@
|
|||||||
#ifndef UUID_AA15E74A856F11E08B8D93F24824019B
|
#ifndef UUID_AA15E74A856F11E08B8D93F24824019B
|
||||||
#define UUID_AA15E74A856F11E08B8D93F24824019B
|
#define UUID_AA15E74A856F11E08B8D93F24824019B
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
|
||||||
|
|
||||||
#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
|
||||||
#pragma GCC system_header
|
|
||||||
#endif
|
|
||||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
|
||||||
#pragma warning(push,1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// MS compatible compilers support #pragma once
|
// MS compatible compilers support #pragma once
|
||||||
|
|
||||||
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
||||||
@ -29,6 +20,7 @@
|
|||||||
// http://www.boost.org/libs/utility/throw_exception.html
|
// http://www.boost.org/libs/utility/throw_exception.html
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
#include <boost/detail/workaround.hpp>
|
#include <boost/detail/workaround.hpp>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
|
||||||
@ -51,6 +43,13 @@
|
|||||||
# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
|
# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||||
|
#pragma GCC system_header
|
||||||
|
#endif
|
||||||
|
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||||
|
#pragma warning(push,1)
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
{
|
{
|
||||||
#ifdef BOOST_NO_EXCEPTIONS
|
#ifdef BOOST_NO_EXCEPTIONS
|
||||||
|
@ -7,15 +7,20 @@
|
|||||||
|
|
||||||
import testing ;
|
import testing ;
|
||||||
|
|
||||||
project
|
|
||||||
: requirements
|
|
||||||
<link>static
|
|
||||||
<exception-handling>on
|
|
||||||
;
|
|
||||||
|
|
||||||
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 ;
|
||||||
|
|
||||||
|
run throw_exception_test2.cpp ;
|
||||||
|
run throw_exception_test3.cpp ;
|
||||||
|
run throw_exception_test4.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 lib2_throw : lib2_throw.cpp : <define>LIB2_SOURCE=1 <link>shared:<define>LIB2_DYN_LINK=1 : : <link>shared:<define>LIB2_DYN_LINK=1 ;
|
||||||
|
lib lib3_throw : lib3_throw.cpp : <define>LIB3_SOURCE=1 <link>shared:<define>LIB3_DYN_LINK=1 : : <link>shared:<define>LIB3_DYN_LINK=1 ;
|
||||||
|
|
||||||
|
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 ;
|
||||||
|
13
test/lib1_throw.cpp
Normal file
13
test/lib1_throw.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include "lib1_throw.hpp"
|
||||||
|
|
||||||
|
void lib1::f()
|
||||||
|
{
|
||||||
|
throw lib1::exception();
|
||||||
|
}
|
35
test/lib1_throw.hpp
Normal file
35
test/lib1_throw.hpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef LIB1_THROW_HPP_INCLUDED
|
||||||
|
#define LIB1_THROW_HPP_INCLUDED
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
#if defined(LIB1_DYN_LINK)
|
||||||
|
# if defined(LIB1_SOURCE)
|
||||||
|
# define LIB1_DECL BOOST_SYMBOL_EXPORT
|
||||||
|
# else
|
||||||
|
# define LIB1_DECL BOOST_SYMBOL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define LIB1_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace lib1
|
||||||
|
{
|
||||||
|
|
||||||
|
struct BOOST_SYMBOL_VISIBLE exception: public std::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
LIB1_DECL void f();
|
||||||
|
|
||||||
|
} // namespace lib1
|
||||||
|
|
||||||
|
#endif // #ifndef LIB1_THROW_HPP_INCLUDED
|
14
test/lib2_throw.cpp
Normal file
14
test/lib2_throw.cpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include "lib2_throw.hpp"
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
|
||||||
|
void lib2::f()
|
||||||
|
{
|
||||||
|
boost::throw_exception( lib2::exception() );
|
||||||
|
}
|
35
test/lib2_throw.hpp
Normal file
35
test/lib2_throw.hpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef LIB2_THROW_HPP_INCLUDED
|
||||||
|
#define LIB2_THROW_HPP_INCLUDED
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
#if defined(LIB2_DYN_LINK)
|
||||||
|
# if defined(LIB2_SOURCE)
|
||||||
|
# define LIB2_DECL BOOST_SYMBOL_EXPORT
|
||||||
|
# else
|
||||||
|
# define LIB2_DECL BOOST_SYMBOL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define LIB2_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace lib2
|
||||||
|
{
|
||||||
|
|
||||||
|
struct BOOST_SYMBOL_VISIBLE exception: public std::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
LIB2_DECL void f();
|
||||||
|
|
||||||
|
} // namespace lib2
|
||||||
|
|
||||||
|
#endif // #ifndef LIB2_THROW_HPP_INCLUDED
|
14
test/lib3_throw.cpp
Normal file
14
test/lib3_throw.cpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include "lib3_throw.hpp"
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
|
||||||
|
void lib3::f()
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( lib3::exception() );
|
||||||
|
}
|
35
test/lib3_throw.hpp
Normal file
35
test/lib3_throw.hpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef LIB3_THROW_HPP_INCLUDED
|
||||||
|
#define LIB3_THROW_HPP_INCLUDED
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
#if defined(LIB3_DYN_LINK)
|
||||||
|
# if defined(LIB3_SOURCE)
|
||||||
|
# define LIB3_DECL BOOST_SYMBOL_EXPORT
|
||||||
|
# else
|
||||||
|
# define LIB3_DECL BOOST_SYMBOL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define LIB3_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace lib3
|
||||||
|
{
|
||||||
|
|
||||||
|
struct BOOST_SYMBOL_VISIBLE exception: public std::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
LIB3_DECL void f();
|
||||||
|
|
||||||
|
} // namespace lib3
|
||||||
|
|
||||||
|
#endif // #ifndef LIB3_THROW_HPP_INCLUDED
|
28
test/throw_exception_test2.cpp
Normal file
28
test/throw_exception_test2.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
|
|
||||||
|
class my_exception: public std::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
class my_exception2: public std::exception, public boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
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_exception() ), boost::exception );
|
||||||
|
BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception2() ), boost::exception );
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
71
test/throw_exception_test3.cpp
Normal file
71
test/throw_exception_test3.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <boost/exception_ptr.hpp>
|
||||||
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
|
|
||||||
|
class my_exception: public std::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
class my_exception2: public std::exception, public boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boost::throw_exception( my_exception() );
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boost::throw_exception( my_exception2() );
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception2 );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception() );
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception2() );
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception2 );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
47
test/throw_exception_test4.cpp
Normal file
47
test/throw_exception_test4.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <boost/exception/get_error_info.hpp>
|
||||||
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
|
|
||||||
|
class my_exception: public std::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
class my_exception2: public std::exception, public boost::exception
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception() );
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
int const * line = boost::get_error_info<boost::throw_line>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( line != 0 );
|
||||||
|
BOOST_TEST_EQ( *line, 24 );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( my_exception2() );
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
int const * line = boost::get_error_info<boost::throw_line>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( line != 0 );
|
||||||
|
BOOST_TEST_EQ( *line, 36 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
79
test/throw_from_library_test.cpp
Normal file
79
test/throw_from_library_test.cpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
#include "lib1_throw.hpp"
|
||||||
|
#include "lib2_throw.hpp"
|
||||||
|
#include "lib3_throw.hpp"
|
||||||
|
#include <boost/exception/exception.hpp>
|
||||||
|
#include <boost/exception_ptr.hpp>
|
||||||
|
#include <boost/exception/get_error_info.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
void test_catch_by_type()
|
||||||
|
{
|
||||||
|
BOOST_TEST_THROWS( lib1::f(), lib1::exception );
|
||||||
|
BOOST_TEST_THROWS( lib2::f(), lib2::exception );
|
||||||
|
BOOST_TEST_THROWS( lib3::f(), lib3::exception );
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_catch_by_exception()
|
||||||
|
{
|
||||||
|
BOOST_TEST_THROWS( lib2::f(), boost::exception );
|
||||||
|
BOOST_TEST_THROWS( lib3::f(), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_exception_ptr()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lib2::f();
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), lib2::exception );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lib3::f();
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
boost::exception_ptr p = boost::current_exception();
|
||||||
|
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), lib3::exception );
|
||||||
|
BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_throw_line()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lib3::f();
|
||||||
|
}
|
||||||
|
catch( boost::exception const & x )
|
||||||
|
{
|
||||||
|
int const * line = boost::get_error_info<boost::throw_line>( x );
|
||||||
|
|
||||||
|
BOOST_TEST( line != 0 );
|
||||||
|
BOOST_TEST_EQ( *line, 13 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
test_catch_by_type();
|
||||||
|
test_catch_by_exception();
|
||||||
|
test_exception_ptr();
|
||||||
|
test_throw_line();
|
||||||
|
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
Reference in New Issue
Block a user