Compare commits

..

2 Commits

Author SHA1 Message Date
Peter Dimov c306d479e8 Update Jamfile to generate dependencies 2017-06-24 03:45:04 +03:00
Peter Dimov 49b3580adf Add cmake files 2017-06-24 00:38:16 +03:00
28 changed files with 593 additions and 1105 deletions
+145 -112
View File
@@ -1,4 +1,4 @@
# Copyright 2016, 2017, 2018 Peter Dimov
# Copyright 2016 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)
@@ -8,11 +8,14 @@ sudo: false
python: "2.7"
os:
- linux
- osx
branches:
only:
- master
- develop
- /feature\/.*/
env:
matrix:
@@ -25,32 +28,10 @@ matrix:
include:
- os: linux
compiler: g++
env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11
env: TOOLSET=gcc COMPILER=g++ CXXSTD=c++03
- 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
env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=c++03
addons:
apt:
packages:
@@ -59,17 +40,34 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-4.8
env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=03,11
env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=c++11
addons:
apt:
packages:
- g++-4.7
sources:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=c++03
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
env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=c++11
addons:
apt:
packages:
- g++-4.8
sources:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=c++03
addons:
apt:
packages:
@@ -78,8 +76,16 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-5
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=03,11,14,1z
env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=c++11
addons:
apt:
packages:
- g++-4.9
sources:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++03
addons:
apt:
packages:
@@ -88,8 +94,25 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-6
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=03,11,14,1z
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++11
addons:
apt:
packages:
- g++-5
sources:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14
addons:
apt:
packages:
- g++-5
sources:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03
addons:
apt:
packages:
@@ -98,60 +121,40 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-7
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11,14,17
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11
addons:
apt:
packages:
- g++-7
- g++-6
sources:
- ubuntu-toolchain-r-test
- os: linux
compiler: g++-7
env: UBSAN=1 TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11,14,17 UBSAN_OPTIONS=print_stacktrace=1
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14
addons:
apt:
packages:
- g++-7
- g++-6
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
env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z
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
- g++-6
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.5
- os: linux
compiler: clang++-3.6
env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=03,11,14,1z
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++03
- os: linux
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11
- os: linux
env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=c++03
addons:
apt:
packages:
@@ -161,8 +164,17 @@ matrix:
- llvm-toolchain-precise-3.6
- os: linux
compiler: clang++-3.7
env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=03,11,14,1z
env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=c++11
addons:
apt:
packages:
- clang-3.6
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.6
- os: linux
env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=c++03
addons:
apt:
packages:
@@ -172,89 +184,110 @@ matrix:
- llvm-toolchain-precise-3.7
- os: linux
compiler: clang++-3.8
env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=03,11,14,1z
env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=c++11
addons:
apt:
packages:
- clang-3.7
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7
- os: linux
env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++03
addons:
apt:
packages:
- clang-3.8
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.8
- os: linux
compiler: clang++-3.9
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=03,11,14,1z
env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++11
addons:
apt:
packages:
- clang-3.8
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.8
- os: linux
env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++14
addons:
apt:
packages:
- clang-3.8
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.8
- os: linux
env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++1z
addons:
apt:
packages:
- clang-3.8
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.8
- os: linux
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++03
addons:
apt:
packages:
- clang-3.9
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.9
- os: linux
compiler: clang++-4.0
env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=03,11,14,1z
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++11
addons:
apt:
packages:
- clang-4.0
- libstdc++-4.9-dev
- clang-3.9
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0
- llvm-toolchain-precise-3.9
- os: linux
compiler: clang++-5.0
env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03,11,14,1z
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++14
addons:
apt:
packages:
- clang-5.0
- libstdc++-4.9-dev
- clang-3.9
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
- llvm-toolchain-precise-3.9
- os: linux
compiler: clang++-5.0
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1
env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++1z
addons:
apt:
packages:
- clang-5.0
- libstdc++-4.9-dev
- clang-3.9
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.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
- llvm-toolchain-precise-3.9
- os: osx
compiler: clang++
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++03
- os: osx
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11
- os: osx
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14
- os: osx
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++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
- git clone -b $TRAVIS_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
@@ -266,8 +299,8 @@ install:
script:
- |-
echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
- ./b2 -j3 libs/system/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}
echo "using $TOOLSET : : $COMPILER : <cxxflags>-std=$CXXSTD ;" > ~/user-config.jam
- ./b2 libs/system/test toolset=$TOOLSET
notifications:
email:
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.5)
include(cmake/BoostVersion.cmake)
set(BOOST_PROJECT_NAME system)
project(boost_${BOOST_PROJECT_NAME} VERSION ${BOOST_VERSION} LANGUAGES CXX)
include(cmake/default.cmake)
+27 -31
View File
@@ -10,7 +10,6 @@ branches:
only:
- master
- develop
- /feature\/.*/
environment:
matrix:
@@ -22,40 +21,38 @@ environment:
TOOLSET: msvc-11.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
TOOLSET: msvc-12.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\cygwin\bin;
TOOLSET: gcc
CXXFLAGS: cxxflags=-std=c++03
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\cygwin\bin;
TOOLSET: gcc
CXXFLAGS: cxxflags=-std=c++11
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\mingw\bin;
TOOLSET: gcc
CXXFLAGS: cxxflags=-std=c++03
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\mingw\bin;
TOOLSET: gcc
CXXFLAGS: cxxflags=-std=c++11
- 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
CXXFLAGS: cxxflags=-std=c++03
- 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
CXXFLAGS: cxxflags=-std=c++11
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-14.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: msvc-14.1
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: msvc-14.1
CXXSTD: 17
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\cygwin\bin;
TOOLSET: gcc
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\cygwin\bin;
TOOLSET: gcc
CXXSTD: 03,11
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\mingw\bin;
TOOLSET: gcc
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
ADDPATH: C:\mingw\bin;
TOOLSET: gcc
CXXSTD: 03,11
- 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
- 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
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
- git clone -b %APPVEYOR_REPO_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
@@ -63,11 +60,10 @@ install:
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\system
- python tools/boostdep/depinst/depinst.py system
- cmd /c bootstrap
- b2 -d0 headers
- b2 headers
build: off
test_script:
- PATH=%ADDPATH%%PATH%
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
- b2 -j3 libs/system/test toolset=%TOOLSET% variant=debug,release %CXXSTD%
- b2 libs/system/test toolset=%TOOLSET% %CXXFLAGS%
+1
View File
@@ -0,0 +1 @@
set(BOOST_VERSION 1.65.0)
+20
View File
@@ -0,0 +1,20 @@
# Update cmake files
install BoostVersion_ : ../../../BoostVersion.cmake : <location>. ;
install default_ : ../../../cmake/default.cmake : <location>. ;
# Update dependencies
import path ;
path-constant LIBDIR : .. ;
actions boostdep-cmake
{
"$(LIBDIR)/../../dist/bin/boostdep" --cmake $(LIBDIR:B) > $(1)
}
make dependencies.cmake : : @boostdep-cmake ;
always dependencies.cmake ;
install dependencies_ : dependencies.cmake : <location>. ;
+103
View File
@@ -0,0 +1,103 @@
#
# Default CMakeLists.txt contents for a Boost library
#
# sources.cmake defines ${PROJECT_NAME}_SOURCES
include(cmake/sources.cmake)
if("${${PROJECT_NAME}_SOURCES}" STREQUAL "")
# if no sources, this is a header-only library
add_library(boost_${BOOST_PROJECT_NAME} INTERFACE)
# include directory
target_include_directories(${PROJECT_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
else()
# a library that requires building
add_library(${PROJECT_NAME} ${${PROJECT_NAME}_SOURCES})
# include directory
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
endif()
# add namespaced alias
add_library(boost::${BOOST_PROJECT_NAME} ALIAS ${PROJECT_NAME})
# set imported target name to the unqualified name, it will be namespaced
set_property(TARGET ${PROJECT_NAME} PROPERTY EXPORT_NAME ${BOOST_PROJECT_NAME})
# link to dependencies
include(CMakeFindDependencyMacro)
function(boost_declare_dependency package type target)
target_link_libraries(${PROJECT_NAME} ${type} ${target})
if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
find_dependency(${package} ${PROJECT_VERSION} EXACT)
endif()
endfunction()
include(cmake/dependencies.cmake)
# target installation
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}-targets
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
INCLUDES DESTINATION include
)
# header installation
install(DIRECTORY include/ DESTINATION include)
# export target info to ${PROJECT_NAME}-targets.cmake, used by -config.cmake
install(EXPORT ${PROJECT_NAME}-targets
FILE ${PROJECT_NAME}-targets.cmake
NAMESPACE boost::
DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION}
)
# install -dependencies.cmake, used by -config.cmake
install(FILES cmake/dependencies.cmake
DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION}
RENAME ${PROJECT_NAME}-dependencies.cmake
)
# write ${PROJECT_NAME}-config.cmake
file(WRITE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" "
include(\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}-targets.cmake)
include(CMakeFindDependencyMacro)
function(boost_declare_dependency package type target)
find_dependency(\${package} ${PROJECT_VERSION} EXACT)
endfunction()
include(\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}-dependencies.cmake)
")
include(CMakePackageConfigHelpers)
# write ${PROJECT_NAME}-config-version.cmake
write_basic_package_version_file("${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
# install -config, -config-version
install(FILES
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION}
)
+8
View File
@@ -0,0 +1,8 @@
# Generated file. Do not edit.
boost_declare_dependency(boost_assert PUBLIC boost::assert)
boost_declare_dependency(boost_config PUBLIC boost::config)
boost_declare_dependency(boost_core PUBLIC boost::core)
boost_declare_dependency(boost_predef PUBLIC boost::predef)
boost_declare_dependency(boost_winapi PUBLIC boost::winapi)
+3
View File
@@ -0,0 +1,3 @@
set(${PROJECT_NAME}_SOURCES
src/error_code.cpp
)
+43 -46
View File
@@ -60,7 +60,8 @@
&nbsp;&nbsp;&nbsp;<a href="#Class-error_condition-constructors">Class <code>error_condition</code> constructors</a><br>
&nbsp;&nbsp;&nbsp;<a href="#Class-error_condition-modifiers">Class <code>error_condition</code> modifiers</a><br>
&nbsp;&nbsp;&nbsp;<a href="#Class-error_condition-observers">Class <code>error_condition</code> observers</a><br>
<a href="#Function-boost-throws">Function <code>boost::throws()</code></a><br>
<a href="#throws-object"><code>throws</code> object</a><br>
<a href="#Semantics-of-throws">Semantics of <code>throws</code> object</a><br>
<a href="#Non-member-functions">Non-member functions</a><br>
<a href="#Header-system_error">Header &lt;boost/system/system_error.hpp&gt;</a><br>
&nbsp;&nbsp;&nbsp;<a href="#Class-system_error">Class <code>system_error</code></a><br>
@@ -80,7 +81,7 @@ noexcept</code> and explicit conversion operators. The actual implementation
uses C++11 features only when they are available, and otherwise falls back on
C++03 features.</p>
<h2><a name="Macros">Macros</a></h2>
<p>Users may define the following macros if desired. Sensible defaults are
<p>Users may defined the following macros if desired. Sensible defaults are
provided, so users may ignore these macros if they prefer.</p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" height="368">
<tr>
@@ -109,16 +110,17 @@ provided, so users may ignore these macros if they prefer.</p>
facility.</td>
</tr>
<tr>
<td valign="top" height="32"><code>BOOST_SYSTEM_ENABLE_DEPRECATED</code></td>
<td valign="top" height="32"><code>BOOST_SYSTEM_NO_DEPRECATED</code></td>
<td valign="top" height="32">Not defined.</td>
<td valign="top" height="32">Deprecated features are provided for compatibility.</td>
<td valign="top" height="32">Deprecated features are excluded.</td>
</tr>
</table>
<h2><a name="Deprecated-names">Deprecated names</a></h2>
<p>In the process of adding Boost.System to the C++11 standard library, the
C++ committee changed some names. To ease transition, Boost.System deprecates
the old names, but will provide them when the macro
<code>BOOST_SYSTEM_ENABLE_DEPRECATED</code> is defined.</p>
<p>In the process of adding Boost.System to C++0x standard library, the C++
committee changed some
names. To ease transition, Boost.System deprecates the old
names, but continues to provide them unless macro <code>BOOST_SYSTEM_NO_DEPRECATED</code>
is defined.</p>
<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td><b><i>Old usage, now deprecated</i></b></td>
@@ -314,12 +316,8 @@ fixed by globally adding () to these names to turn them into function calls.</p>
operator&lt;&lt;( basic_ostream&lt;charT,traits&gt;&amp; os, const error_code &amp; ec );
size_t hash_value( const error_code &amp; ec );
} // namespace system
system::error_code &amp; throws();
} // namespace boost</pre>
}
}</pre>
</blockquote>
<p>The value of each<code> errc_t</code> constant shall be the same as the
value of the <code>&lt;cerrno&gt;</code> macro shown in the above synopsis.</p>
@@ -646,6 +644,36 @@ observers</a></h3>
<code>int</code>) that can occur with <code>bool</code> are not allowed,
eliminating some sources of user error. One possible implementation choice for
this type is pointer to member. <i>--end note</i> <i>]</i></p>
</blockquote>
<h2><a name="throws-object"><code>throws</code> object</a></h2>
<pre>extern error_code throws;</pre>
<p>The predefined <code>error_code</code> object <code>throws</code> is supplied
for use as a &quot;throw on error&quot; tag.</p>
<h2><a name="Semantics-of-throws">Semantics of <code>throws</code></a> object</h2>
<p>Functions that specify an argument in the form <code>error_code&amp; ec=throws</code>,
with appropriate namespace qualifiers, have the following error handling
semantics:</p>
<blockquote>
<p><i>Postconditions:</i></p>
<blockquote>
<p>If <code>&amp;ec != &amp;throws</code> and an error occurred:</p>
<ul>
<li> <code>ec.value()</code> returns the implementation specific error
number for the particular error that occurred.</li>
<li><code>ec.category()</code> returns the <code>
<a href="#Class-error_category">error_category</a></code> for <code>ec.value()</code>.</li>
</ul>
<p>if <code>&amp;ec != &amp;throws</code> and an error did not occur, <code>ec.clear()</code>.</p>
</blockquote>
<p><i>Throws:</i></p>
<blockquote>
<p>If an error occurs and <code>&amp;ec == &amp;throws</code>, throws an exception of type
<code><a href="#Class-system_error">system_error</a></code> or of a type
derived from <code><a href="#Class-system_error">system_error</a></code>. The
exception's <code>code()</code> member function returns a reference to an
<code>error_code</code> object with the behavior specified in <i>
Postconditions</i>.</p>
</blockquote>
</blockquote>
<h2><a name="Non-member-functions">Non-member functions</a></h2>
<pre>bool operator==( const error_code &amp; lhs, const error_code &amp; rhs ) noexcept;</pre>
@@ -708,37 +736,6 @@ bool operator!=( const error_condition &amp; condition, const error_code &amp; c
<p><i>Returns: </i>&nbsp;A hash value representing <code>ec</code>.</p>
</blockquote>
<h2><a name="Function-boost-throws">Function <code>boost::throws()</code></a></h2>
<pre>system::error_code&amp; throws();</pre>
<blockquote>
<p><i>Returns:</i> A <code>system::error_code</code> reference
for use in some user-defined function signature as a &quot;throw on error&quot; tag.</p>
<p><i>Remark:</i> The only valid use for the returned reference is to test its
address for equality or inequality to the address of the reference returned by
another call to throws(). The returned reference itself has been poisoned so
that an attempt to dereference it will fail.</p>
<p>[<i>Example: </i>Example of a function that uses the <code>throws()</code> idiom:</p>
<blockquote>
<pre>int divide(int dividend, int divisor,
boost::system::error_code&amp; ec = boost::throws())
{
if (divisor == 0) // is there an error?
{
if (&amp;ec == &amp;boost::throws()) // throw on error
throw &quot;oops!&quot;; // whatever exception you prefer
ec = error_code(EDOM, generic_category()); // report error via error_code
return 0;
}
if (&amp;ec != &amp;boost::throws()) // error reporting via error_code
ec.clear();
return dividend / divisor;
}</pre>
</blockquote>
<p>&mdash; <i>end Example</i>]</p>
</blockquote>
<h2><a name="Header-system_error">Header &lt;boost/system/system_error.hpp&gt;</a></h2>
<h3><a name="Class-system_error">Class <code>
@@ -821,7 +818,7 @@ application program interfaces.</p>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%B %d, %Y" startspan -->September 07, 2017<!--webbot bot="Timestamp" endspan i-checksum="38006" --> </font>
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%B %d, %Y" startspan -->January 06, 2014<!--webbot bot="Timestamp" endspan i-checksum="31400" --> </font>
</p>
<p>© Copyright Beman Dawes, 2006, 2007, 2008, 2013</p>
+78 -91
View File
@@ -21,9 +21,9 @@
#include <cstring> // for strerror/strerror_r
# if defined( BOOST_WINDOWS_API )
# include <boost/winapi/error_codes.hpp>
# include <boost/winapi/error_handling.hpp>
# include <boost/winapi/character_code_conversion.hpp>
# include <boost/detail/winapi/error_codes.hpp>
# include <boost/detail/winapi/error_handling.hpp>
# include <boost/detail/winapi/character_code_conversion.hpp>
# if !BOOST_PLAT_WINDOWS_RUNTIME
# include <boost/system/detail/local_free_on_destruction.hpp>
# endif
@@ -35,22 +35,39 @@
//--------------------------------------------------------------------------------------//
namespace boost
{
namespace system
{
namespace system
namespace
{
namespace detail
{
// standard error categories -------------------------------------------------------//
#ifdef BOOST_ERROR_CODE_HEADER_ONLY
# define BOOST_SYSTEM_DECL_ inline
#else
# define BOOST_SYSTEM_DECL_ BOOST_SYSTEM_DECL
#endif
class generic_error_category : public error_category
{
public:
generic_error_category(){}
const char * name() const BOOST_SYSTEM_NOEXCEPT;
std::string message( int ev ) const;
};
class system_error_category : public error_category
{
public:
system_error_category(){}
const char * name() const BOOST_SYSTEM_NOEXCEPT;
std::string message( int ev ) const;
error_condition default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;
};
// generic_error_category implementation ---------------------------------//
BOOST_SYSTEM_DECL_ std::string generic_error_category::message( int ev ) const
const char * generic_error_category::name() const BOOST_SYSTEM_NOEXCEPT
{
return "generic";
}
std::string generic_error_category::message( int ev ) const
{
using namespace boost::system::errc;
#if defined(__PGI)
@@ -137,13 +154,19 @@ namespace detail
# endif
if ( sz > sizeof(buf) ) std::free( bp );
sz = 0;
return msg;
# endif // else POSIX version of strerror_r
# endif // else use strerror_r
}
// system_error_category implementation --------------------------------------------//
BOOST_SYSTEM_DECL_ error_condition system_error_category::default_error_condition( int ev ) const
const char * system_error_category::name() const BOOST_SYSTEM_NOEXCEPT
{
return "system";
}
error_condition system_error_category::default_error_condition( int ev ) const
BOOST_SYSTEM_NOEXCEPT
{
using namespace boost::system::errc;
@@ -164,7 +187,7 @@ namespace detail
# if defined(BOOST_WINDOWS_API)
using namespace boost::winapi; // for error codes
using namespace boost::detail::winapi; // for error codes
# endif
@@ -348,27 +371,27 @@ namespace detail
# if !defined( BOOST_WINDOWS_API )
BOOST_SYSTEM_DECL_ std::string system_error_category::message( int ev ) const
std::string system_error_category::message( int ev ) const
{
return generic_category().message( ev );
}
# else
BOOST_SYSTEM_DECL_ std::string system_error_category::message( int ev ) const
std::string system_error_category::message( int ev ) const
{
#if defined(UNDER_CE) || BOOST_PLAT_WINDOWS_RUNTIME || defined(BOOST_NO_ANSI_APIS)
std::wstring buf(128, wchar_t());
for (;;)
{
boost::winapi::DWORD_ retval = boost::winapi::FormatMessageW(
boost::winapi::FORMAT_MESSAGE_FROM_SYSTEM_ |
boost::winapi::FORMAT_MESSAGE_IGNORE_INSERTS_,
boost::detail::winapi::DWORD_ retval = boost::detail::winapi::FormatMessageW(
boost::detail::winapi::FORMAT_MESSAGE_FROM_SYSTEM_ |
boost::detail::winapi::FORMAT_MESSAGE_IGNORE_INSERTS_,
NULL,
ev,
boost::winapi::MAKELANGID_(boost::winapi::LANG_NEUTRAL_,
boost::winapi::SUBLANG_DEFAULT_), // Default language
boost::detail::winapi::MAKELANGID_(boost::detail::winapi::LANG_NEUTRAL_,
boost::detail::winapi::SUBLANG_DEFAULT_), // Default language
&buf[0],
static_cast<boost::winapi::DWORD_>(buf.size()),
buf.size(),
NULL
);
@@ -377,8 +400,8 @@ namespace detail
buf.resize(retval);
break;
}
else if (boost::winapi::GetLastError() !=
boost::winapi::ERROR_INSUFFICIENT_BUFFER_)
else if (boost::detail::winapi::GetLastError() !=
boost::detail::winapi::ERROR_INSUFFICIENT_BUFFER_)
{
return std::string("Unknown error");
}
@@ -388,16 +411,10 @@ namespace detail
}
}
int num_chars = static_cast<int>(buf.size() + 1) * 2;
boost::winapi::LPSTR_ narrow_buffer =
#if defined(__GNUC__)
(boost::winapi::LPSTR_)__builtin_alloca(num_chars);
#else
(boost::winapi::LPSTR_)_alloca(num_chars);
#endif
if (boost::winapi::WideCharToMultiByte(boost::winapi::CP_ACP_, 0,
int num_chars = (buf.size() + 1) * 2;
boost::detail::winapi::LPSTR_ narrow_buffer =
(boost::detail::winapi::LPSTR_)_alloca(num_chars);
if (boost::detail::winapi::WideCharToMultiByte(boost::detail::winapi::CP_ACP_, 0,
buf.c_str(), -1, narrow_buffer, num_chars, NULL, NULL) == 0)
{
return std::string("Unknown error");
@@ -405,16 +422,16 @@ namespace detail
std::string str( narrow_buffer );
#else
boost::winapi::LPVOID_ lpMsgBuf = 0;
boost::winapi::DWORD_ retval = boost::winapi::FormatMessageA(
boost::winapi::FORMAT_MESSAGE_ALLOCATE_BUFFER_ |
boost::winapi::FORMAT_MESSAGE_FROM_SYSTEM_ |
boost::winapi::FORMAT_MESSAGE_IGNORE_INSERTS_,
boost::detail::winapi::LPVOID_ lpMsgBuf = 0;
boost::detail::winapi::DWORD_ retval = boost::detail::winapi::FormatMessageA(
boost::detail::winapi::FORMAT_MESSAGE_ALLOCATE_BUFFER_ |
boost::detail::winapi::FORMAT_MESSAGE_FROM_SYSTEM_ |
boost::detail::winapi::FORMAT_MESSAGE_IGNORE_INSERTS_,
NULL,
ev,
boost::winapi::MAKELANGID_(boost::winapi::LANG_NEUTRAL_,
boost::winapi::SUBLANG_DEFAULT_), // Default language
(boost::winapi::LPSTR_) &lpMsgBuf,
boost::detail::winapi::MAKELANGID_(boost::detail::winapi::LANG_NEUTRAL_,
boost::detail::winapi::SUBLANG_DEFAULT_), // Default language
(boost::detail::winapi::LPSTR_) &lpMsgBuf,
0,
NULL
);
@@ -422,7 +439,7 @@ namespace detail
if (retval == 0)
return std::string("Unknown error");
std::string str(static_cast<boost::winapi::LPCSTR_>(lpMsgBuf));
std::string str(static_cast<boost::detail::winapi::LPCSTR_>(lpMsgBuf));
# endif
while ( str.size()
&& (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') )
@@ -433,12 +450,10 @@ namespace detail
}
# endif
#undef BOOST_SYSTEM_DECL_
} // namespace detail
} // unnamed namespace
# ifdef BOOST_SYSTEM_ENABLE_DEPRECATED
# ifndef BOOST_SYSTEM_NO_DEPRECATED
BOOST_SYSTEM_DECL error_code throws; // "throw on error" special error_code;
// note that it doesn't matter if this
// isn't initialized before use since
@@ -446,51 +461,23 @@ namespace detail
// address for comparison purposes
# endif
#if defined(BOOST_ERROR_CODE_HEADER_ONLY)
# ifdef BOOST_ERROR_CODE_HEADER_ONLY
# define BOOST_SYSTEM_LINKAGE inline
# else
# define BOOST_SYSTEM_LINKAGE BOOST_SYSTEM_DECL
# endif
// defined in error_code.hpp
BOOST_SYSTEM_LINKAGE const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
{
static const system_error_category system_category_const;
return system_category_const;
}
#elif defined(BOOST_SYSTEM_HAS_CONSTEXPR)
namespace detail
{
BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL system_error_category system_category_instance;
BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL generic_error_category generic_category_instance;
BOOST_SYSTEM_DECL const error_category & system_category_ncx() BOOST_SYSTEM_NOEXCEPT
{
return system_category_instance;
}
BOOST_SYSTEM_DECL const error_category & generic_category_ncx() BOOST_SYSTEM_NOEXCEPT
{
return generic_category_instance;
}
} // namespace detail
#else
namespace detail
{
BOOST_SYSTEM_DECL const error_category & system_category_ncx() BOOST_SYSTEM_NOEXCEPT
{
static const detail::system_error_category system_category_instance;
return system_category_instance;
}
BOOST_SYSTEM_DECL const error_category & generic_category_ncx() BOOST_SYSTEM_NOEXCEPT
{
static const detail::generic_error_category generic_category_instance;
return generic_category_instance;
}
} // namespace detail
#endif
} // namespace system
BOOST_SYSTEM_LINKAGE const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
{
static const generic_error_category generic_category_const;
return generic_category_const;
}
} // namespace system
} // namespace boost
@@ -12,7 +12,7 @@
#ifndef BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
#define BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
#include <boost/winapi/local_memory.hpp>
#include <boost/detail/winapi/local_memory.hpp>
namespace boost {
namespace system {
@@ -26,7 +26,7 @@ public:
~local_free_on_destruction()
{
boost::winapi::LocalFree(p_);
boost::detail::winapi::LocalFree(p_);
}
private:
+57 -301
View File
@@ -2,7 +2,6 @@
// Copyright Beman Dawes 2006, 2007
// Copyright Christoper Kohlhoff 2007
// Copyright Peter Dimov 2017, 2018
// 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)
@@ -39,21 +38,6 @@
#define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT
#endif
#if !defined(BOOST_NO_CXX14_CONSTEXPR)
# define BOOST_SYSTEM_HAS_CONSTEXPR
#endif
#if defined(__GNUC__) && (__GNUC__ == 7 || __GNUC__ == 8) && __cplusplus >= 201700L
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83835
# undef BOOST_SYSTEM_HAS_CONSTEXPR
#endif
#if defined(BOOST_SYSTEM_HAS_CONSTEXPR)
# define BOOST_SYSTEM_CONSTEXPR constexpr
#else
# define BOOST_SYSTEM_CONSTEXPR
#endif
namespace boost
{
namespace system
@@ -160,7 +144,7 @@ namespace boost
} // namespace errc
# ifdef BOOST_SYSTEM_ENABLE_DEPRECATED
# ifndef BOOST_SYSTEM_NO_DEPRECATED
namespace posix = errc;
namespace posix_error = errc;
# endif
@@ -201,10 +185,29 @@ namespace boost
// --------------------------------------------------------------------------------//
#ifdef BOOST_MSVC
#pragma warning(push)
// 'this' : used in base member initializer list
#pragma warning(disable: 4355)
class error_category;
// predefined error categories ---------------------------------------------------//
#ifdef BOOST_ERROR_CODE_HEADER_ONLY
inline const error_category & system_category() BOOST_SYSTEM_NOEXCEPT;
inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT;
#else
BOOST_SYSTEM_DECL const error_category & system_category() BOOST_SYSTEM_NOEXCEPT;
BOOST_SYSTEM_DECL const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT;
#endif
// deprecated synonyms ------------------------------------------------------------//
#ifndef BOOST_SYSTEM_NO_DEPRECATED
inline const error_category & get_system_category() { return system_category(); }
inline const error_category & get_generic_category() { return generic_category(); }
inline const error_category & get_posix_category() { return generic_category(); }
static const error_category & posix_category BOOST_ATTRIBUTE_UNUSED
= generic_category();
static const error_category & errno_ecat BOOST_ATTRIBUTE_UNUSED
= generic_category();
static const error_category & native_ecat BOOST_ATTRIBUTE_UNUSED
= system_category();
#endif
// class error_category ------------------------------------------------//
@@ -223,7 +226,7 @@ namespace boost
public:
BOOST_SYSTEM_CONSTEXPR explicit std_category( boost::system::error_category const * pc ): pc_( pc )
explicit std_category( boost::system::error_category const * pc ): pc_( pc )
{
}
@@ -249,7 +252,7 @@ namespace boost
public:
BOOST_SYSTEM_CONSTEXPR error_category() BOOST_SYSTEM_NOEXCEPT: std_cat_( this ) {}
error_category() BOOST_SYSTEM_NOEXCEPT: std_cat_( this ) {}
operator std::error_category const & () const BOOST_SYSTEM_NOEXCEPT
{
@@ -259,49 +262,6 @@ namespace boost
return std_cat_;
}
#else
// to maintain ABI compatibility between 03 and 11,
// define a class with the same layout
private:
class std_category
{
private:
boost::system::error_category const * pc_;
public:
BOOST_SYSTEM_CONSTEXPR explicit std_category( boost::system::error_category const * pc ): pc_( pc )
{
}
virtual ~std_category() {}
virtual const char * name() const BOOST_NOEXCEPT
{
return pc_->name();
}
// we can't define message, because (1) it returns an std::string,
// which can be different between 03 and 11, and (2) on mingw, there
// are actually two `message` functions, not one, so it doesn't work
// even if we do
// neither can we define default_error_condition or equivalent
// if these functions are called, it will crash, but that's still
// better than the alternative of having the class layout change
};
std_category std_cat_;
public:
BOOST_SYSTEM_CONSTEXPR error_category() BOOST_SYSTEM_NOEXCEPT: std_cat_( this ) {}
#endif
public:
@@ -316,183 +276,15 @@ namespace boost
BOOST_SYSTEM_NOEXCEPT;
inline virtual bool equivalent( const error_code & code,
int condition ) const BOOST_SYSTEM_NOEXCEPT;
bool operator==(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT
{ return this == &rhs; }
bool operator!=(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT
{ return this != &rhs; }
bool operator<( const error_category & rhs ) const BOOST_SYSTEM_NOEXCEPT
{ return std::less<const error_category*>()( this, &rhs ); }
};
BOOST_SYSTEM_CONSTEXPR inline bool operator==( const error_category & lhs,
const error_category & rhs ) BOOST_SYSTEM_NOEXCEPT
{ return &lhs == &rhs; }
BOOST_SYSTEM_CONSTEXPR inline bool operator!=( const error_category & lhs,
const error_category & rhs ) BOOST_SYSTEM_NOEXCEPT
{ return &lhs != &rhs; }
inline bool operator<( const error_category & lhs,
const error_category & rhs ) BOOST_SYSTEM_NOEXCEPT
{ return std::less<const error_category*>()( &lhs, &rhs ); }
#ifdef BOOST_MSVC
#pragma warning(pop)
#endif
// predefined error categories ---------------------------------------------------//
namespace detail
{
#ifdef BOOST_ERROR_CODE_HEADER_ONLY
# define BOOST_SYSTEM_DECL_
#else
# define BOOST_SYSTEM_DECL_ BOOST_SYSTEM_DECL
#endif
class generic_error_category: public error_category
{
public:
// clang++ 3.8 and below: initialization of const object
// requires a user-provided default constructor
BOOST_SYSTEM_CONSTEXPR generic_error_category() BOOST_SYSTEM_NOEXCEPT
{
}
const char * name() const BOOST_SYSTEM_NOEXCEPT
{
return "generic";
}
BOOST_SYSTEM_DECL_ std::string message( int ev ) const;
};
class system_error_category: public error_category
{
public:
BOOST_SYSTEM_CONSTEXPR system_error_category() BOOST_SYSTEM_NOEXCEPT
{
}
const char * name() const BOOST_SYSTEM_NOEXCEPT
{
return "system";
}
BOOST_SYSTEM_DECL_ std::string message( int ev ) const;
BOOST_SYSTEM_DECL_ error_condition default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;
};
#undef BOOST_SYSTEM_DECL_
} // namespace detail
#define BOOST_SYSTEM_REQUIRE_CONST_INIT
#if defined(__has_cpp_attribute)
#if __has_cpp_attribute(clang::require_constant_initialization)
# undef BOOST_SYSTEM_REQUIRE_CONST_INIT
# define BOOST_SYSTEM_REQUIRE_CONST_INIT [[clang::require_constant_initialization]]
#endif
#endif
#if defined(BOOST_ERROR_CODE_HEADER_ONLY)
# if defined(BOOST_SYSTEM_HAS_CONSTEXPR)
namespace detail
{
template<class T> struct cat_holder
{
static system_error_category system_category_instance;
static generic_error_category generic_category_instance;
};
template<class T> BOOST_SYSTEM_REQUIRE_CONST_INIT system_error_category cat_holder<T>::system_category_instance;
template<class T> BOOST_SYSTEM_REQUIRE_CONST_INIT generic_error_category cat_holder<T>::generic_category_instance;
} // namespace detail
constexpr const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
{
return detail::cat_holder<void>::system_category_instance;
}
constexpr const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
{
return detail::cat_holder<void>::generic_category_instance;
}
# else
inline const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
{
static const detail::system_error_category system_category_instance;
return system_category_instance;
}
inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
{
static const detail::generic_error_category generic_category_instance;
return generic_category_instance;
}
# endif
#elif defined(BOOST_SYSTEM_HAS_CONSTEXPR)
namespace detail
{
extern system_error_category system_category_instance;
extern generic_error_category generic_category_instance;
} // namespace detail
constexpr const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
{
return detail::system_category_instance;
}
constexpr const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
{
return detail::generic_category_instance;
}
#else
namespace detail
{
BOOST_SYSTEM_DECL const error_category & system_category_ncx() BOOST_SYSTEM_NOEXCEPT;
BOOST_SYSTEM_DECL const error_category & generic_category_ncx() BOOST_SYSTEM_NOEXCEPT;
} // namespace detail
inline const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
{
return detail::system_category_ncx();
}
inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
{
return detail::generic_category_ncx();
}
#endif
// deprecated synonyms ------------------------------------------------------------//
#ifdef BOOST_SYSTEM_ENABLE_DEPRECATED
inline const error_category & get_system_category() { return system_category(); }
inline const error_category & get_generic_category() { return generic_category(); }
inline const error_category & get_posix_category() { return generic_category(); }
static const error_category & posix_category BOOST_ATTRIBUTE_UNUSED
= generic_category();
static const error_category & errno_ecat BOOST_ATTRIBUTE_UNUSED
= generic_category();
static const error_category & native_ecat BOOST_ATTRIBUTE_UNUSED
= system_category();
#endif
// class error_condition ---------------------------------------------------------//
// error_conditions are portable, error_codes are system or library specific
@@ -502,8 +294,8 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
public:
// constructors:
BOOST_SYSTEM_CONSTEXPR error_condition() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&generic_category()) {}
BOOST_SYSTEM_CONSTEXPR error_condition( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
error_condition() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&generic_category()) {}
error_condition( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
: m_val(val), m_cat(&cat) {}
template <class ErrorConditionEnum>
@@ -516,7 +308,7 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
// modifiers:
BOOST_SYSTEM_CONSTEXPR void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
{
m_val = val;
m_cat = &cat;
@@ -531,45 +323,34 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
return *this;
}
BOOST_SYSTEM_CONSTEXPR void clear() BOOST_SYSTEM_NOEXCEPT
void clear() BOOST_SYSTEM_NOEXCEPT
{
m_val = 0;
m_cat = &generic_category();
}
// observers:
BOOST_SYSTEM_CONSTEXPR int value() const BOOST_SYSTEM_NOEXCEPT { return m_val; }
BOOST_SYSTEM_CONSTEXPR const error_category & category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
int value() const BOOST_SYSTEM_NOEXCEPT { return m_val; }
const error_category & category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
std::string message() const { return m_cat->message(value()); }
#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
BOOST_SYSTEM_CONSTEXPR explicit operator bool() const BOOST_SYSTEM_NOEXCEPT // true if error
{
return m_val != 0;
}
#else
typedef void (*unspecified_bool_type)();
static void unspecified_bool_true() {}
BOOST_SYSTEM_CONSTEXPR operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT // true if error
operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT // true if error
{
return m_val == 0 ? 0 : unspecified_bool_true;
}
BOOST_SYSTEM_CONSTEXPR bool operator!() const BOOST_SYSTEM_NOEXCEPT // true if no error
bool operator!() const BOOST_SYSTEM_NOEXCEPT // true if no error
{
return m_val == 0;
}
#endif
// relationals:
// the more symmetrical non-member syntax allows enum
// conversions work for both rhs and lhs.
BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( const error_condition & lhs,
inline friend bool operator==( const error_condition & lhs,
const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
{
return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;
@@ -612,8 +393,8 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
public:
// constructors:
BOOST_SYSTEM_CONSTEXPR error_code() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&system_category()) {}
BOOST_SYSTEM_CONSTEXPR error_code( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
error_code() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&system_category()) {}
error_code( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
: m_val(val), m_cat(&cat) {}
template <class ErrorCodeEnum>
@@ -625,7 +406,7 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
}
// modifiers:
BOOST_SYSTEM_CONSTEXPR void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
{
m_val = val;
m_cat = &cat;
@@ -639,45 +420,34 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
return *this;
}
BOOST_SYSTEM_CONSTEXPR void clear() BOOST_SYSTEM_NOEXCEPT
void clear() BOOST_SYSTEM_NOEXCEPT
{
m_val = 0;
m_cat = &system_category();
}
// observers:
BOOST_SYSTEM_CONSTEXPR int value() const BOOST_SYSTEM_NOEXCEPT { return m_val; }
BOOST_SYSTEM_CONSTEXPR const error_category & category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
int value() const BOOST_SYSTEM_NOEXCEPT { return m_val; }
const error_category & category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
error_condition default_error_condition() const BOOST_SYSTEM_NOEXCEPT
{ return m_cat->default_error_condition(value()); }
std::string message() const { return m_cat->message(value()); }
#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
BOOST_SYSTEM_CONSTEXPR explicit operator bool() const BOOST_SYSTEM_NOEXCEPT // true if error
{
return m_val != 0;
}
#else
typedef void (*unspecified_bool_type)();
static void unspecified_bool_true() {}
BOOST_SYSTEM_CONSTEXPR operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT // true if error
operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT // true if error
{
return m_val == 0 ? 0 : unspecified_bool_true;
}
BOOST_SYSTEM_CONSTEXPR bool operator!() const BOOST_SYSTEM_NOEXCEPT // true if no error
bool operator!() const BOOST_SYSTEM_NOEXCEPT // true if no error
{
return m_val == 0;
}
#endif
// relationals:
BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( const error_code & lhs,
inline friend bool operator==( const error_code & lhs,
const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
// the more symmetrical non-member syntax allows enum
// conversions work for both rhs and lhs.
@@ -710,7 +480,7 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
};
// predefined error_code object used as "throw on error" tag
# ifdef BOOST_SYSTEM_ENABLE_DEPRECATED
# ifndef BOOST_SYSTEM_NO_DEPRECATED
BOOST_SYSTEM_DECL extern error_code throws;
# endif
@@ -719,9 +489,8 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
// "throws" function in namespace boost rather than namespace boost::system.
} // namespace system
namespace detail
{
namespace detail { inline system::error_code * throws() { return 0; } }
// Misuse of the error_code object is turned into a noisy failure by
// poisoning the reference. This particular implementation doesn't
// produce warnings or errors from popular compilers, is very efficient
@@ -729,34 +498,21 @@ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
// from order of initialization problems. In practice, it also seems
// cause user function error handling implementation errors to be detected
// very early in the development cycle.
inline system::error_code* throws()
{
// See github.com/boostorg/system/pull/12 by visigoth for why the return
// is poisoned with nonzero rather than (0). A test, test_throws_usage(),
// has been added to error_code_test.cpp, and as visigoth mentioned it
// fails on clang for release builds with a return of 0 but works fine
// with (1).
// Since the undefined behavior sanitizer (-fsanitize=undefined) does not
// allow a reference to be formed to the unaligned address of (1), we use
// (8) instead.
return reinterpret_cast<system::error_code*>(8);
}
}
inline system::error_code& throws()
inline system::error_code & throws()
{ return *detail::throws(); }
namespace system
{
// non-member functions ------------------------------------------------//
BOOST_SYSTEM_CONSTEXPR inline bool operator!=( const error_code & lhs,
inline bool operator!=( const error_code & lhs,
const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
{
return !(lhs == rhs);
}
BOOST_SYSTEM_CONSTEXPR inline bool operator!=( const error_condition & lhs,
inline bool operator!=( const error_condition & lhs,
const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
{
return !(lhs == rhs);
+1 -1
View File
@@ -89,7 +89,7 @@ namespace boost
};
} // namespace linux_error
# ifdef BOOST_SYSTEM_ENABLE_DEPRECATED
# ifndef BOOST_SYSTEM_NO_DEPRECATED
namespace Linux = linux_error;
# endif
+52 -52
View File
@@ -28,7 +28,7 @@
//#include <winerror.h>
//#endif
#include <boost/winapi/error_codes.hpp>
#include <boost/detail/winapi/error_codes.hpp>
namespace boost
{
@@ -47,59 +47,59 @@ namespace boost
{
success = 0,
// These names and values are based on Windows winerror.h
invalid_function = boost::winapi::ERROR_INVALID_FUNCTION_,
file_not_found = boost::winapi::ERROR_FILE_NOT_FOUND_,
path_not_found = boost::winapi::ERROR_PATH_NOT_FOUND_,
too_many_open_files = boost::winapi::ERROR_TOO_MANY_OPEN_FILES_,
access_denied = boost::winapi::ERROR_ACCESS_DENIED_,
invalid_handle = boost::winapi::ERROR_INVALID_HANDLE_,
arena_trashed = boost::winapi::ERROR_ARENA_TRASHED_,
not_enough_memory = boost::winapi::ERROR_NOT_ENOUGH_MEMORY_,
invalid_block = boost::winapi::ERROR_INVALID_BLOCK_,
bad_environment = boost::winapi::ERROR_BAD_ENVIRONMENT_,
bad_format = boost::winapi::ERROR_BAD_FORMAT_,
invalid_access = boost::winapi::ERROR_INVALID_ACCESS_,
outofmemory = boost::winapi::ERROR_OUTOFMEMORY_,
invalid_drive = boost::winapi::ERROR_INVALID_DRIVE_,
current_directory = boost::winapi::ERROR_CURRENT_DIRECTORY_,
not_same_device = boost::winapi::ERROR_NOT_SAME_DEVICE_,
no_more_files = boost::winapi::ERROR_NO_MORE_FILES_,
write_protect = boost::winapi::ERROR_WRITE_PROTECT_,
bad_unit = boost::winapi::ERROR_BAD_UNIT_,
not_ready = boost::winapi::ERROR_NOT_READY_,
bad_command = boost::winapi::ERROR_BAD_COMMAND_,
crc = boost::winapi::ERROR_CRC_,
bad_length = boost::winapi::ERROR_BAD_LENGTH_,
seek = boost::winapi::ERROR_SEEK_,
not_dos_disk = boost::winapi::ERROR_NOT_DOS_DISK_,
sector_not_found = boost::winapi::ERROR_SECTOR_NOT_FOUND_,
out_of_paper = boost::winapi::ERROR_OUT_OF_PAPER_,
write_fault = boost::winapi::ERROR_WRITE_FAULT_,
read_fault = boost::winapi::ERROR_READ_FAULT_,
gen_failure = boost::winapi::ERROR_GEN_FAILURE_,
sharing_violation = boost::winapi::ERROR_SHARING_VIOLATION_,
lock_violation = boost::winapi::ERROR_LOCK_VIOLATION_,
wrong_disk = boost::winapi::ERROR_WRONG_DISK_,
sharing_buffer_exceeded = boost::winapi::ERROR_SHARING_BUFFER_EXCEEDED_,
handle_eof = boost::winapi::ERROR_HANDLE_EOF_,
handle_disk_full= boost::winapi::ERROR_HANDLE_DISK_FULL_,
rem_not_list = boost::winapi::ERROR_REM_NOT_LIST_,
dup_name = boost::winapi::ERROR_DUP_NAME_,
bad_net_path = boost::winapi::ERROR_BAD_NETPATH_,
network_busy = boost::winapi::ERROR_NETWORK_BUSY_,
invalid_function = boost::detail::winapi::ERROR_INVALID_FUNCTION_,
file_not_found = boost::detail::winapi::ERROR_FILE_NOT_FOUND_,
path_not_found = boost::detail::winapi::ERROR_PATH_NOT_FOUND_,
too_many_open_files = boost::detail::winapi::ERROR_TOO_MANY_OPEN_FILES_,
access_denied = boost::detail::winapi::ERROR_ACCESS_DENIED_,
invalid_handle = boost::detail::winapi::ERROR_INVALID_HANDLE_,
arena_trashed = boost::detail::winapi::ERROR_ARENA_TRASHED_,
not_enough_memory = boost::detail::winapi::ERROR_NOT_ENOUGH_MEMORY_,
invalid_block = boost::detail::winapi::ERROR_INVALID_BLOCK_,
bad_environment = boost::detail::winapi::ERROR_BAD_ENVIRONMENT_,
bad_format = boost::detail::winapi::ERROR_BAD_FORMAT_,
invalid_access = boost::detail::winapi::ERROR_INVALID_ACCESS_,
outofmemory = boost::detail::winapi::ERROR_OUTOFMEMORY_,
invalid_drive = boost::detail::winapi::ERROR_INVALID_DRIVE_,
current_directory = boost::detail::winapi::ERROR_CURRENT_DIRECTORY_,
not_same_device = boost::detail::winapi::ERROR_NOT_SAME_DEVICE_,
no_more_files = boost::detail::winapi::ERROR_NO_MORE_FILES_,
write_protect = boost::detail::winapi::ERROR_WRITE_PROTECT_,
bad_unit = boost::detail::winapi::ERROR_BAD_UNIT_,
not_ready = boost::detail::winapi::ERROR_NOT_READY_,
bad_command = boost::detail::winapi::ERROR_BAD_COMMAND_,
crc = boost::detail::winapi::ERROR_CRC_,
bad_length = boost::detail::winapi::ERROR_BAD_LENGTH_,
seek = boost::detail::winapi::ERROR_SEEK_,
not_dos_disk = boost::detail::winapi::ERROR_NOT_DOS_DISK_,
sector_not_found = boost::detail::winapi::ERROR_SECTOR_NOT_FOUND_,
out_of_paper = boost::detail::winapi::ERROR_OUT_OF_PAPER_,
write_fault = boost::detail::winapi::ERROR_WRITE_FAULT_,
read_fault = boost::detail::winapi::ERROR_READ_FAULT_,
gen_failure = boost::detail::winapi::ERROR_GEN_FAILURE_,
sharing_violation = boost::detail::winapi::ERROR_SHARING_VIOLATION_,
lock_violation = boost::detail::winapi::ERROR_LOCK_VIOLATION_,
wrong_disk = boost::detail::winapi::ERROR_WRONG_DISK_,
sharing_buffer_exceeded = boost::detail::winapi::ERROR_SHARING_BUFFER_EXCEEDED_,
handle_eof = boost::detail::winapi::ERROR_HANDLE_EOF_,
handle_disk_full= boost::detail::winapi::ERROR_HANDLE_DISK_FULL_,
rem_not_list = boost::detail::winapi::ERROR_REM_NOT_LIST_,
dup_name = boost::detail::winapi::ERROR_DUP_NAME_,
bad_net_path = boost::detail::winapi::ERROR_BAD_NETPATH_,
network_busy = boost::detail::winapi::ERROR_NETWORK_BUSY_,
// ...
file_exists = boost::winapi::ERROR_FILE_EXISTS_,
cannot_make = boost::winapi::ERROR_CANNOT_MAKE_,
file_exists = boost::detail::winapi::ERROR_FILE_EXISTS_,
cannot_make = boost::detail::winapi::ERROR_CANNOT_MAKE_,
// ...
broken_pipe = boost::winapi::ERROR_BROKEN_PIPE_,
open_failed = boost::winapi::ERROR_OPEN_FAILED_,
buffer_overflow = boost::winapi::ERROR_BUFFER_OVERFLOW_,
disk_full= boost::winapi::ERROR_DISK_FULL_,
broken_pipe = boost::detail::winapi::ERROR_BROKEN_PIPE_,
open_failed = boost::detail::winapi::ERROR_OPEN_FAILED_,
buffer_overflow = boost::detail::winapi::ERROR_BUFFER_OVERFLOW_,
disk_full= boost::detail::winapi::ERROR_DISK_FULL_,
// ...
lock_failed = boost::winapi::ERROR_LOCK_FAILED_,
busy = boost::winapi::ERROR_BUSY_,
cancel_violation = boost::winapi::ERROR_CANCEL_VIOLATION_,
already_exists = boost::winapi::ERROR_ALREADY_EXISTS_
lock_failed = boost::detail::winapi::ERROR_LOCK_FAILED_,
busy = boost::detail::winapi::ERROR_BUSY_,
cancel_violation = boost::detail::winapi::ERROR_CANCEL_VIOLATION_,
already_exists = boost::detail::winapi::ERROR_ALREADY_EXISTS_
// ...
// TODO: add more Windows errors
@@ -107,7 +107,7 @@ namespace boost
} // namespace windows
# ifdef BOOST_SYSTEM_ENABLE_DEPRECATED
# ifndef BOOST_SYSTEM_NO_DEPRECATED
namespace windows = windows_error;
# endif
+32 -100
View File
@@ -8,7 +8,6 @@
# See library home page at http://www.boost.org/libs/system
import testing ;
import os ;
project
: requirements
@@ -21,113 +20,46 @@ project
: <link>shared:<define>BOOST_SYSTEM_DYN_LINK=1
<link>static:<define>BOOST_SYSTEM_STATIC_LINK=1
;
lib single_instance_lib1 : single_instance_1.cpp : <link>shared:<define>SINGLE_INSTANCE_DYN_LINK ;
lib single_instance_lib2 : single_instance_2.cpp : <link>shared:<define>SINGLE_INSTANCE_DYN_LINK ;
rule cxx03 ( properties * )
{
local result ;
if <toolset>gcc in $(properties)
{
result = <cxxflags>-std=c++98 ; # 4.4 has no 03
}
else if <toolset>clang in $(properties)
{
result = <cxxflags>-std=c++03 ;
}
else
{
result = <build>no ;
}
return $(result) ;
}
rule cxx11 ( properties * )
{
local result ;
if <toolset>gcc in $(properties)
{
result = <cxxflags>-std=c++0x ; # 4.6 has no 11
}
else if <toolset>clang in $(properties)
{
result = <cxxflags>-std=c++11 ;
}
else
{
result = <build>no ;
}
return $(result) ;
}
rule system-run- ( sources + )
{
local result ;
result += [ run $(sources) : : : <link>static : $(sources[1]:B)_static ] ;
result += [ run $(sources) : : : <link>shared : $(sources[1]:B)_shared ] ;
result += [ run $(sources) : : : -<library>/boost/system//boost_system <define>BOOST_ERROR_CODE_HEADER_ONLY : $(sources[1]:B)_header ] ;
return $(result) ;
}
if [ os.environ UBSAN ]
{
rule system-run ( sources + )
{
# The 03/11 tests are ODR violations, no point running them under -fsanitize=undefined
return [ system-run- $(sources) ] ;
}
}
else
{
rule system-run ( sources + )
{
local result = [ system-run- $(sources) ] ;
# Test a source file built with -std=c++03 linked with a System library built without -std=c++03
result += [ run $(sources) : : : <link>static <conditional>@cxx03 : $(sources[1]:B)_static_03 ] ;
result += [ run $(sources) : : : <link>shared <conditional>@cxx03 : $(sources[1]:B)_shared_03 ] ;
# Test a source file built with -std=c++11 linked with a System library built without -std=c++11
result += [ run $(sources) : : : <link>static <conditional>@cxx11 : $(sources[1]:B)_static_11 ] ;
result += [ run $(sources) : : : <link>shared <conditional>@cxx11 : $(sources[1]:B)_shared_11 ] ;
return $(result) ;
}
}
test-suite "system"
: [ system-run error_code_test.cpp ]
[ system-run error_code_user_test.cpp ]
[ system-run system_error_test.cpp ]
: [ run error_code_test.cpp
: # command line
: # input files
: # requirements
<link>static
]
[ run error_code_test.cpp
: : : <link>shared : error_code_test_shared
]
[ run error_code_user_test.cpp
: : : <link>static
]
[ run error_code_user_test.cpp
: : : <link>shared : error_code_user_test_shared
]
[ run system_error_test.cpp
: : : <link>static
]
[ run system_error_test.cpp
: : : <link>shared : system_error_test_shared
]
[ run dynamic_link_test.cpp throw_test
: : : <link>shared : throw_test_shared
]
[ system-run initialization_test.cpp ]
[ run header_only_test.cpp
: : : -<library>/boost/system//boost_system
[ run initialization_test.cpp
: : : <link>shared : initialization_test_shared
]
[ run header_only_test.cpp
: : : -<library>/boost/system//boost_system <define>BOOST_NO_ANSI_APIS : header_only_test_no_ansi
: : : <link>static
]
[ run config_test.cpp
: : : <test-info>always_show_run_output
: : : <test-info>always_show_run_output
]
[ run std_interop_test.cpp
: : : <link>static
]
[ run std_interop_test.cpp
: : : <link>shared : std_interop_test_shared
]
[ system-run- std_interop_test.cpp ]
[ system-run std_mismatch_test.cpp ]
[ system-run single_instance_test.cpp single_instance_1.cpp single_instance_2.cpp ]
[ run single_instance_test.cpp single_instance_lib1 single_instance_lib2 : : : <link>static : single_instance_lib_static ]
[ run single_instance_test.cpp single_instance_lib1 single_instance_lib2 : : : <link>shared : single_instance_lib_shared ]
[ system-run before_main_test.cpp ]
[ run-fail throws_assign_fail.cpp ]
[ system-run- constexpr_test.cpp ]
;
# Quick (CI) test
run quick.cpp ;
-30
View File
@@ -1,30 +0,0 @@
// Copyright 2018 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/system/error_code.hpp>
#include <boost/core/lightweight_test.hpp>
#include <cerrno>
using namespace boost::system;
static error_code e1( 1, system_category() );
static std::string m1 = e1.message();
static error_code e2( ENOENT, generic_category() );
static std::string m2 = e2.message();
int main()
{
error_code e1_( 1, system_category() );
BOOST_TEST_EQ( e1, e1_ );
BOOST_TEST_EQ( m1, e1_.message() );
error_code e2_( ENOENT, generic_category() );
BOOST_TEST_EQ( e2, e2_ );
BOOST_TEST_EQ( m2, e2_.message() );
return boost::report_errors();
}
-68
View File
@@ -1,68 +0,0 @@
// Copyright 2018 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/system/error_code.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/config/pragma_message.hpp>
#include <boost/static_assert.hpp>
#include <boost/config.hpp>
#include <boost/config/workaround.hpp>
#if !defined(BOOST_SYSTEM_HAS_CONSTEXPR)
BOOST_PRAGMA_MESSAGE("Skipping constexpr test, BOOST_SYSTEM_HAS_CONSTEXPR isn't defined")
int main() {}
#else
using namespace boost::system;
constexpr error_code e1( 1, system_category() );
BOOST_STATIC_ASSERT( e1.value() == 1 );
BOOST_STATIC_ASSERT( e1.category() == system_category() );
BOOST_STATIC_ASSERT( e1 );
BOOST_STATIC_ASSERT( e1 == e1 );
constexpr error_code e2( 2, generic_category() );
BOOST_STATIC_ASSERT( e2.value() == 2 );
BOOST_STATIC_ASSERT( e2.category() == generic_category() );
BOOST_STATIC_ASSERT( e2 );
BOOST_STATIC_ASSERT( e2 == e2 );
#if !BOOST_WORKAROUND(BOOST_GCC, < 80000)
BOOST_STATIC_ASSERT( e1 != e2 );
#endif
constexpr error_code e3;
BOOST_STATIC_ASSERT( e3.value() == 0 );
BOOST_STATIC_ASSERT( e3.category() == system_category() );
BOOST_STATIC_ASSERT( !e3 );
BOOST_STATIC_ASSERT( e3 == e3 );
#if !BOOST_WORKAROUND(BOOST_GCC, < 80000)
BOOST_STATIC_ASSERT( e1 != e3 );
#endif
int main()
{
error_code e1_( 1, system_category() );
BOOST_TEST_EQ( e1, e1_ );
error_code e2_( 2, generic_category() );
BOOST_TEST_EQ( e2, e2_ );
error_code e3_;
BOOST_TEST_EQ( e3, e3_ );
return boost::report_errors();
}
#endif
+3 -49
View File
@@ -9,6 +9,9 @@
//----------------------------------------------------------------------------//
// test without deprecated features
#define BOOST_SYSTEM_NO_DEPRECATED
#include <boost/config/warning_disable.hpp>
#include <boost/detail/lightweight_test.hpp>
@@ -53,53 +56,6 @@ namespace
ss >> s;
BOOST_TEST( s == expected );
}
// throws_function_test ------------------------------------------------------------//
// usage example
int divide(int dividend, int divisor, boost::system::error_code& ec = boost::throws())
{
if (divisor == 0) // is there an error?
{
if (&ec == &boost::throws()) // throw on error
throw "oops!"; // whatever exception you prefer
ec = error_code(EDOM, generic_category()); // report error via error_code
return 0;
}
if (&ec != &boost::throws()) // error reporting via error_code
ec.clear();
return dividend / divisor;
}
// test usage example
void test_throws_usage()
{
std::cout << "Test throws() example and usage...\n";
error_code ec;
// no error tests
BOOST_TEST_EQ((divide(10, 2)), 5); // no error, report via exception
ec = make_error_code(errc::argument_out_of_domain);
BOOST_TEST_EQ((divide(10, 5, ec)), 2); // no error, report via error_code
BOOST_TEST(!ec);
ec = make_error_code(errc::argument_out_of_domain);
BOOST_TEST_EQ((divide(10, 0, ec)), 0); // error, report via error_code
BOOST_TEST(ec);
bool exception_thrown = false;
try
{ divide(10, 0); } // error, report via exception
catch (...)
{ exception_thrown = true; }
BOOST_TEST(exception_thrown);
//error_code should_fail(boost::throws()); // should fail at runtime
//boost::throws() = ec; // should fail at runtime
}
}
// main ------------------------------------------------------------------------------//
@@ -246,8 +202,6 @@ int main( int, char ** )
BOOST_TEST( econd.message() != "" );
BOOST_TEST( econd.message().substr( 0, 13) != "Unknown error" );
test_throws_usage();
#ifdef BOOST_WINDOWS_API
std::cout << "Windows tests...\n";
// these tests probe the Windows errc decoder
+2
View File
@@ -14,6 +14,8 @@
// Motivation was a Boost posting by Christopher Kohlhoff on June 28, 2006.
#define BOOST_SYSTEM_NO_DEPRECATED
#include <boost/system/error_code.hpp>
#include <boost/cerrno.hpp>
#include <string>
+1 -1
View File
@@ -1,4 +1,4 @@
// header_only_test.cpp -----------------------------------------------------//
// error_code_test.cpp -----------------------------------------------------//
// Copyright Beman Dawes 2007
+4 -4
View File
@@ -10,19 +10,19 @@
// This test verifiies that the error_category vtable does not suffer from
// order-of-initialization problems.
#include <boost/detail/lightweight_test.hpp>
#include <boost/system/error_code.hpp>
#include <boost/core/lightweight_test.hpp>
struct foo
{
foo()
{
boost::system::error_code ec;
BOOST_TEST_NE( ec, boost::system::errc::permission_denied );
ec == boost::system::posix::permission_denied;
}
} f;
int main()
int main( int, char ** )
{
return boost::report_errors();
return ::boost::report_errors();
}
-36
View File
@@ -1,36 +0,0 @@
// 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
// See library home page at http://www.boost.org/libs/system
#include <boost/system/error_code.hpp>
#include <boost/core/lightweight_test.hpp>
#include <cerrno>
int main()
{
boost::system::error_category const & bt = boost::system::generic_category();
int ev = ENOENT;
boost::system::error_code bc( ev, bt );
BOOST_TEST_EQ( bc.value(), ev );
BOOST_TEST_EQ( &bc.category(), &bt );
boost::system::error_condition bn = bt.default_error_condition( ev );
BOOST_TEST_EQ( bn.value(), ev );
BOOST_TEST_EQ( &bn.category(), &bt );
BOOST_TEST( bt.equivalent( ev, bn ) );
BOOST_TEST( bc == bn );
return boost::report_errors();
}
-29
View File
@@ -1,29 +0,0 @@
// Copyright 2018 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/config.hpp>
#if defined(SINGLE_INSTANCE_DYN_LINK)
# define EXPORT BOOST_SYMBOL_EXPORT
#else
# define EXPORT
#endif
#include <boost/system/error_code.hpp>
using namespace boost::system;
namespace lib1
{
EXPORT error_code get_system_code()
{
return error_code( 0, system_category() );
}
EXPORT error_code get_generic_code()
{
return error_code( 0, generic_category() );
}
} // namespace lib1
-29
View File
@@ -1,29 +0,0 @@
// Copyright 2018 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/config.hpp>
#if defined(SINGLE_INSTANCE_DYN_LINK)
# define EXPORT BOOST_SYMBOL_EXPORT
#else
# define EXPORT
#endif
#include <boost/system/error_code.hpp>
using namespace boost::system;
namespace lib2
{
EXPORT error_code get_system_code()
{
return error_code( 0, system_category() );
}
EXPORT error_code get_generic_code()
{
return error_code( 0, generic_category() );
}
} // namespace lib2
-32
View File
@@ -1,32 +0,0 @@
// Copyright 2018 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/system/error_code.hpp>
#include <boost/core/lightweight_test.hpp>
using namespace boost::system;
namespace lib1
{
error_code get_system_code();
error_code get_generic_code();
} // namespace lib1
namespace lib2
{
error_code get_system_code();
error_code get_generic_code();
} // namespace lib2
int main()
{
BOOST_TEST_EQ( lib1::get_system_code(), lib2::get_system_code() );
BOOST_TEST_EQ( lib1::get_generic_code(), lib2::get_generic_code() );
return boost::report_errors();
}
-63
View File
@@ -1,63 +0,0 @@
// 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
// See library home page at http://www.boost.org/libs/system
// Avoid spurious VC++ warnings
# define _CRT_SECURE_NO_WARNINGS
#include <boost/config.hpp>
#include <iostream>
#if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR)
int main()
{
std::cout
<< "The version of the C++ standard library being used does not"
" support header <system_error> so interoperation will not be tested.\n";
}
#else
#include <boost/system/error_code.hpp>
#include <boost/core/lightweight_test.hpp>
#include <system_error>
#include <cerrno>
#include <string>
#include <cstdio>
static void test_generic_category()
{
boost::system::error_category const & bt = boost::system::generic_category();
std::error_category const & st = bt;
BOOST_TEST_CSTR_EQ( bt.name(), st.name() );
}
static void test_system_category()
{
boost::system::error_category const & bt = boost::system::system_category();
std::error_category const & st = bt;
BOOST_TEST_CSTR_EQ( bt.name(), st.name() );
}
int main()
{
std::cout
<< "The version of the C++ standard library being used"
" supports header <system_error> so interoperation will be tested.\n";
test_generic_category();
test_system_category();
return boost::report_errors();
}
#endif
+3
View File
@@ -9,6 +9,9 @@
//----------------------------------------------------------------------------//
// test without deprecated features
#define BOOST_SYSTEM_NO_DEPRECATED
#include <boost/config/warning_disable.hpp>
#include <boost/detail/lightweight_test.hpp>
-28
View File
@@ -1,28 +0,0 @@
// Copyright 2018 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/system/error_code.hpp>
using namespace boost::system;
static void f( error_code & ec )
{
ec = error_code();
}
#if defined(_WIN32)
# include <windows.h> // SetErrorMode
#endif
int main()
{
#if defined(_WIN32)
SetErrorMode( SetErrorMode( 0 ) | SEM_NOGPFAULTERRORBOX );
#endif
// this should crash
f( boost::throws() );
}