Compare commits

...

55 Commits

Author SHA1 Message Date
832731f5ab Update CI 2019-07-01 13:58:32 -04:00
4c26c6ee3f Update CI 2019-05-01 21:08:59 -04:00
3a9110fc34 [CMake] Add minimal cmake file
Supports the use of boost logic in a parent
cmake project via add_subdirectory( libs/logic )
2019-01-04 19:08:13 -05:00
fd021e5eb7 Enhance CI with libc++ and VS2017 strict builds 2018-11-03 21:48:02 -04:00
c305a4a1e4 expand travis CI to more configurations 2018-10-16 15:04:44 -04:00
82a233bee1 omit unnecessary bits when explicit operator conversions are supported 2018-10-16 15:04:44 -04:00
d76d7dc4d2 trac-13104: fix typo in comment 2018-10-14 10:11:41 -04:00
fd1146f735 fix unused variable warning in a test 2018-10-14 10:11:41 -04:00
b65ddb430a trac-12244: fix detection of wchar_t availability 2018-10-14 10:11:41 -04:00
f890fcdf66 Reenable constexpr test for operator bool 2018-08-20 08:18:35 -04:00
23cd89d4c8 Use explicit operator bool when available 2018-08-20 08:18:35 -04:00
bffcf0c4db fix broken ci jobs in travis 2018-07-14 20:49:39 +00:00
5d622865d3 Fix coverity badges in readme 2018-07-04 21:27:11 -04:00
bab21e89b2 Added CI framework
- travis with valgrind, cppcheck, ubsan, codecov, covscan (future)
  - appveyor with MSVC 2010 through 2017, cygwin 32/64, mingw 32/64
  - README, LICENSE, etc.
2018-07-04 21:20:41 -04:00
e824ad54e0 Add .travis.yml 2018-03-31 20:59:51 +03:00
3233579d46 Merge branch 'master' into develop 2017-04-24 12:56:27 -04:00
8cb4972256 Add, and update, documentation build targets. 2016-10-10 11:39:51 -05:00
45b4578110 Add, and update, documentation build targets. 2016-10-07 23:07:34 -05:00
addbcdb81a Merge changes from develop for the 1.58.0 release 2015-04-01 10:30:54 -07:00
b3adfec7ff Merge pull request #2 from apolukhin/develop
C++11 updates for tribool: added noexcepts and constexprs, fixed warnings

Tested on Linux with gcc-4.9.1.
2014-11-02 15:44:13 -07:00
1e220fccf3 Merge pull request #3 from danieljames/metadata
Create metadata file.
2014-09-01 20:33:52 -06:00
6e391684a9 Add metadata file. 2014-08-18 15:00:59 +01:00
e1f476eaba Docs update 2014-07-31 18:11:11 +04:00
bf0907a227 C++11 updates for tribool: added noexcepts and constexprs, fixed warnings 2014-07-31 00:54:51 +04:00
1dab9cd10a Merge pull request #1 from boostorg/develop
Merge to master.
2014-05-16 08:40:43 -06:00
2afd1a9ec6 Create merge base for git. 2014-04-06 14:12:46 +01:00
95baf1910a Logic: Remove obsolete MSVC version check.
[SVN r86041]
2013-09-30 00:22:10 +00:00
9f9a1e7656 Remove obsolete MSVC check from pragma guard
git grep -h -B1 "^#\s*pragma once" | grep -v pragma | sort | uniq

is now clean.

[SVN r85952]
2013-09-26 13:02:51 +00:00
aede53315c Merge root index file, and logic redirect.
[SVN r72210]
2011-05-27 11:53:52 +00:00
31af87e6ae Tribool: add a redirect to the docs.
[SVN r71603]
2011-04-29 11:03:48 +00:00
5ad06c7370 Logic: merge old warning fixes.
- [53429] Fix `gcc -Wshadow` warnings. Fixes #3093.
- [58007] Remove unused parameter. Fixes #3600.


[SVN r70520]
2011-03-24 20:55:46 +00:00
c053ade60f Merge documentation fixes.
* Use `doc/src/*.css` instead of `doc/html/*.css`.
* Remove wiki and people directories.
* Some documentation fixes.
* Left out `minimal.css` changes and boostbook changes because of clashes.


[SVN r63347]
2010-06-26 12:30:09 +00:00
9c4577cce3 Detab some jamfiles.
[SVN r63343]
2010-06-26 12:10:47 +00:00
9e230b17ef Update various libraries' documentation build.
Mostly to use the images and css files under doc/src instead of
doc/html, usually be deleting the settings in order to use the defaults.
Also add 'boost.root' to some builds in order to fix links which rely on
it.

[SVN r63146]
2010-06-20 18:00:48 +00:00
62e9529e09 Removed unused parameter; fixes #3600
[SVN r58007]
2009-11-28 17:05:54 +00:00
6c6cc7dce3 rm cmake from trunk. I'm not entirely sure this is necessary to satisfy the inspect script, but I'm not taking any chances, and it is easy to put back
[SVN r56942]
2009-10-17 02:07:38 +00:00
b86917fe43 rm cmake from the release branch before it goes out broken. Policy dictates that you never commit to release, you commit to trunk and merge to release.
[SVN r56941]
2009-10-17 01:10:45 +00:00
987080a8c7 Fix up logic and date_time Jamfiles so they build needed dependencies.
Fix PDF image paths in fusion Jamfile.v2.
Add fusion to the PDF build.

[SVN r55757]
2009-08-24 10:31:43 +00:00
5aaba307a6 Add depencies on doxygen documentation to standalone documentation targets.
This seems to be needed for building pdfs.

[SVN r55729]
2009-08-23 10:07:25 +00:00
a582587b22 Copyrights on CMakeLists.txt to keep them from clogging up the inspect
reports.  This is essentially the same commit as r55095 on the release
branch.



[SVN r55159]
2009-07-26 00:49:56 +00:00
bd737d03b0 Add basic copyright/license to keep cmake out of the inspection report
[SVN r55095]
2009-07-22 21:51:01 +00:00
246d1ee6df Fix gcc -Wshadow warnings in tribool.
Fixes #3093. 1/2 of the patch provided by Dustin Spicuzza.


[SVN r53429]
2009-05-30 06:36:18 +00:00
58cd700623 Merge PDF build changes from Trunk.
[SVN r51417]
2009-02-23 18:39:32 +00:00
233cfca75c Add PDF generation options to fix external links to point to the web site.
Added a few more Boostbook based libs that were missed first time around.
Fixed PDF naming issues.

[SVN r51284]
2009-02-17 10:05:58 +00:00
951486c794 merge of cmake build files from trunk per beman
[SVN r50756]
2009-01-24 18:57:20 +00:00
44aa483237 Updating dependency information for modularized libraries.
[SVN r49628]
2008-11-07 17:05:27 +00:00
84313760a5 Updating CMake files to latest trunk. Added dependency information for regression tests and a few new macros for internal use.
[SVN r49627]
2008-11-07 17:02:56 +00:00
9df9f3daf6 Continuing merge of CMake build system files into trunk with the encouragement of Doug Gregor
[SVN r49510]
2008-11-01 13:15:41 +00:00
f1d8f513bf Merged from trunk
[SVN r42973]
2008-01-25 21:18:27 +00:00
9db33f9dcf Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41370]
2007-11-25 18:38:02 +00:00
02caed268b Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41369]
2007-11-25 18:07:19 +00:00
5749fb9ef1 Starting point for releases
[SVN r39706]
2007-10-05 14:25:06 +00:00
03a2600bf5 This commit was manufactured by cvs2svn to create tag
'Version_1_34_1'.

[SVN r38286]
2007-07-24 19:28:14 +00:00
9e9489c7bd Remove obsolete Boost.Build v1 files.
[SVN r35880]
2006-11-06 17:10:46 +00:00
73cce598c7 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r33417]
2006-03-21 02:26:31 +00:00
22 changed files with 831 additions and 68 deletions

235
.travis.yml Normal file
View File

@ -0,0 +1,235 @@
# Copyright 2016 Peter Dimov
# Copyright 2017 - 2019 James E. King III
# 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)
#
# Generic Travis CI build script for boostorg repositories
# See: https://github.com/boostorg/boost-ci
#
# Instructions for customizing this script for your library:
#
# 1. Customize the compilers and language levels you want in the 'jobs'.
# 2. If you have more than include/, src/, test/, example/, examples/, or
# tools/ directories, modify your Travis CI project and add the environment
# variable DEPINST. For example if your build uses code in "bench/" and
# "fog/" directories, then set DEPINST to the following:
# --include bench --include fog
# 3. If you want to enable Coverity Scan, you need to provide the environment
# variables COVERITY_SCAN_TOKEN and COVERITY_SCAN_NOTIFICATION_EMAIL in
# your github settings.
# 4. If you want to enable a big-endian build, you need to uncomment the
# big-endian build job.
# 5. Enable pull request builds in your boostorg/<library> account.
#
# That's it - the scripts will do everything else for you.
dist: xenial
language: cpp
env:
global:
# see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties
# - B2_ADDRESS_MODEL=address-model=64,32
# - B2_LINK=link=shared,static
# - B2_THREADING=threading=multi,single
- B2_VARIANT=variant=release
install:
- git clone https://github.com/boostorg/boost-ci.git boost-ci
- cp -pr boost-ci/ci boost-ci/.codecov.yml .
- source ci/travis/install.sh
addons:
apt:
packages:
- binutils-gold
- gdb
- libc6-dbg
- qemu-user-static
services:
- docker
branches:
only:
- master
- develop
- /bugfix\/.*/
- /feature\/.*/
- /fix\/.*/
- /pr\/.*/
script:
- cd $BOOST_ROOT/libs/$SELF
- ci/travis/build.sh
#
# Default toolsets in Ubuntu
#
# trusty xenial bionic
# 14.04 16.04 18.04
# ------ ------ ------
# clang 3.4 3.8 6.0
# gcc 4.8.2 5.3.1 7.3.0
#
anchors:
clang-38: &clang-38 { apt: { packages: [ "clang-3.8",
"libstdc++-6-dev" ], sources: [ "llvm-toolchain-xenial-3.8",
"ubuntu-toolchain-r-test" ] } }
clang-4: &clang-4 { apt: { packages: [ "clang-4.0",
"libstdc++-6-dev" ], sources: [ "llvm-toolchain-xenial-4.0",
"ubuntu-toolchain-r-test" ] } }
clang-5: &clang-5 { apt: { packages: [ "clang-5.0",
"libstdc++-7-dev" ], sources: [ "llvm-toolchain-xenial-5.0",
"ubuntu-toolchain-r-test" ] } }
clang-6: &clang-6 { apt: { packages: [ "clang-6.0",
"libc6-dbg",
"libc++-dev",
"libstdc++-8-dev" ], sources: [ "llvm-toolchain-xenial-6.0",
"ubuntu-toolchain-r-test" ] } }
clang-7: &clang-7 { apt: { packages: [ "clang-7",
"libc6-dbg",
"libc++-dev",
"libstdc++-8-dev" ], sources: [ "llvm-toolchain-xenial-7",
"ubuntu-toolchain-r-test" ] } }
clang-8: &clang-8 { apt: { packages: [ "clang-8",
"libc6-dbg",
"libc++-dev",
"libstdc++-8-dev" ], sources: [ "llvm-toolchain-xenial-8",
"ubuntu-toolchain-r-test" ] } }
gcc-48: &gcc-48 { apt: { packages: [ "g++-4.8" ] } }
gcc-49: &gcc-49 { apt: { packages: [ "g++-4.9" ], sources: [ "ubuntu-toolchain-r-test" ] } }
gcc-5: &gcc-5 { apt: { packages: [ "g++-5" ] } }
gcc-6: &gcc-6 { apt: { packages: [ "g++-6" ], sources: [ "ubuntu-toolchain-r-test" ] } }
gcc-7: &gcc-7 { apt: { packages: [ "g++-7" ], sources: [ "ubuntu-toolchain-r-test" ] } }
gcc-8: &gcc-8 { apt: { packages: [ "g++-8" ], sources: [ "ubuntu-toolchain-r-test" ] } }
gcc-9: &gcc-9 { apt: { packages: [ "g++-9" ], sources: [ "ubuntu-toolchain-r-test" ] } }
jobs:
allow_failures:
- env:
- COPY="all the environment settings from your job"
include:
# libstdc++
- { os: "linux", dist: "trusty", # xenial has libstdc++ from gcc 5.4.0 with newer ABI
env: [ "B2_TOOLSET=gcc-4.8", "B2_CXXSTD=03,11" ], addons: *gcc-48 }
- { os: "linux", dist: "trusty", # xenial has libstdc++ from gcc 5.4.0 with newer ABI
env: [ "B2_TOOLSET=gcc-4.9", "B2_CXXSTD=03,11" ], addons: *gcc-49 }
- { os: "linux", env: [ "B2_TOOLSET=gcc-5", "B2_CXXSTD=03,11" ], addons: *gcc-5 }
- { os: "linux", env: [ "B2_TOOLSET=gcc-6", "B2_CXXSTD=11,14" ], addons: *gcc-6 }
- { os: "linux", env: [ "B2_TOOLSET=gcc-7", "B2_CXXSTD=14,17" ], addons: *gcc-7 }
- { os: "linux", env: [ "B2_TOOLSET=gcc-8", "B2_CXXSTD=17,2a" ], addons: *gcc-8 }
- { os: "linux", env: [ "B2_TOOLSET=gcc-9", "B2_CXXSTD=17,2a" ], addons: *gcc-9 }
- { os: "linux", dist: "trusty", # xenial has libstdc++ from gcc 5.4.0 with newer ABI
env: [ "B2_TOOLSET=clang-3.8", "B2_CXXSTD=03,11" ], addons: *clang-38 }
- { os: "linux", env: [ "B2_TOOLSET=clang-4.0", "B2_CXXSTD=11,14" ], addons: *clang-4 }
- { os: "linux", env: [ "B2_TOOLSET=clang-5.0", "B2_CXXSTD=11,14" ], addons: *clang-5 }
- { os: "linux", env: [ "B2_TOOLSET=clang-6.0", "B2_CXXSTD=14,17" ], addons: *clang-6 }
- { os: "linux", env: [ "B2_TOOLSET=clang-7", "B2_CXXSTD=17,2a" ], addons: *clang-7 }
- { os: "linux", env: [ "B2_TOOLSET=clang-8", "B2_CXXSTD=17,2a" ], addons: *clang-8 }
# libc++
- { os: "linux", env: [ "B2_TOOLSET=clang-6.0", "B2_CXXSTD=03,11,14",
"B2_CXXFLAGS=-stdlib=libc++" ], addons: *clang-6 }
- { os: "osx" , env: [ "B2_TOOLSET=clang", "B2_CXXSTD=03,11,17" ] }
# to enable Intel ICC define INTEL_ICC_SERIAL_NUMBER and the following (under development):
# - { os: "linux", env: [ "B2_TOOLSET=intel-linux", "B2_CXXSTD=11,14,17" ], addons: *gcc-7,
# script: cd $BOOST_ROOT/libs/$SELF && ci/travis/intelicc.sh }
# uncomment to enable a big-endian build job, just note that it is 5-10 times slower
# than a regular build and travis has a 50 minute time limit per job
# - os: linux
# env:
# - COMMENT=big-endian
# - B2_CXXSTD=03
# - B2_TOOLSET=gcc
# - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1"
# - BDDE_OS=red
# - BDDE_ARCH=ppc64
# script:
# - cd $BOOST_ROOT/libs/$SELF
# - ci/travis/bdde.sh
- os: linux
env:
- COMMENT=codecov.io
- B2_CXXSTD=03,11
- B2_TOOLSET=gcc-8
- B2_DEFINES="define=BOOST_NO_STRESS_TEST=1"
addons: *gcc-8
script:
- cd $BOOST_ROOT/libs/$SELF
- ci/travis/codecov.sh
- os: linux
env:
- COMMENT=asan
- B2_VARIANT=variant=debug
- B2_TOOLSET=gcc-8
- B2_CXXSTD=03,11,14
- B2_CXXFLAGS="address-sanitizer=norecover"
- B2_DEFINES="define=BOOST_NO_STRESS_TEST=1"
addons: *gcc-8
- os: linux
env:
- COMMENT=tsan
- B2_VARIANT=variant=debug
- B2_TOOLSET=gcc-8
- B2_CXXSTD=03,11,14
- B2_CXXFLAGS="thread-sanitizer=norecover"
- B2_DEFINES="define=BOOST_NO_STRESS_TEST=1"
addons: *gcc-8
- os: linux
env:
- COMMENT=ubsan
- B2_VARIANT=variant=debug
- B2_TOOLSET=gcc-8
- B2_CXXSTD=03,11,14
- B2_CXXFLAGS="undefined-sanitizer=norecover"
- B2_DEFINES="define=BOOST_NO_STRESS_TEST=1"
- B2_LINKFLAGS="linkflags=-fuse-ld=gold"
- UBSAN_OPTIONS=print_stacktrace=1
addons: *gcc-8
- os: linux
env:
- COMMENT=valgrind
- B2_TOOLSET=clang-6.0
- B2_CXXSTD=03,11,14
- B2_DEFINES="define=BOOST_NO_STRESS_TEST=1"
- B2_VARIANT=variant=debug
- B2_TESTFLAGS=testing.launcher=valgrind
- VALGRIND_OPTS=--error-exitcode=1
addons: *clang-6
script:
- cd $BOOST_ROOT/libs/$SELF
- ci/travis/valgrind.sh
# - os: linux
# env:
# - COMMENT=cppcheck
# script:
# - cd $BOOST_ROOT/libs/$SELF
# - ci/travis/cppcheck.sh
#################### Jobs to run on pushes to master, develop ###################
# Coverity Scan
- os: linux
if: (env(COVERITY_SCAN_NOTIFICATION_EMAIL) IS present) AND (branch IN (develop, master)) AND (type IN (cron, push))
env:
- COMMENT="Coverity Scan"
- B2_TOOLSET=clang
script:
- cd $BOOST_ROOT/libs/$SELF
- ci/travis/coverity.sh
notifications:
email:
false

20
CMakeLists.txt Normal file
View File

@ -0,0 +1,20 @@
# 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
#
# NOTE: CMake support for Boost.Logic is currently experimental at best
# and the interface is likely to change in the future
cmake_minimum_required( VERSION 3.5 )
project( BoostLogic LANGUAGES CXX )
add_library( boost_logic INTERFACE )
add_library( Boost::logic ALIAS boost_logic )
target_include_directories( boost_logic INTERFACE include )
target_link_libraries( boost_logic
INTERFACE
Boost::config
Boost::core
)

10
Jamfile Normal file
View File

@ -0,0 +1,10 @@
# Boost.Logic Library Jamfile
#
# Copyright (c) 2018 James E. King III
#
# Use, modification, and distribution are subject to the
# Boost Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
# please order by name to ease maintenance
build-project test ;

23
LICENSE Normal file
View File

@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

34
README.md Normal file
View File

@ -0,0 +1,34 @@
Logic, part of collection of the [Boost C++ Libraries](http://github.com/boostorg), provides `boost::logic::tribool` for 3-state boolean logic.
### License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
### Properties
* C++03
* Header Only
### Build Status
Branch | Travis | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- |
[`master`](https://github.com/boostorg/logic/tree/master) | [![Build Status](https://travis-ci.org/boostorg/logic.svg?branch=master)](https://travis-ci.org/boostorg/logic) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8spmo2t3x9/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/logic-vv3ct/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg-logic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/logic/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/logic.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/logic.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/logic.html)
[`develop`](https://github.com/boostorg/logic/tree/develop) | [![Build Status](https://travis-ci.org/boostorg/logic.svg?branch=develop)](https://travis-ci.org/boostorg/logic) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8spmo2t3x9/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/logic-vv3ct/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg-logic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/logic/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/logic.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/logic.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/logic.html)
### Directories
| Name | Purpose |
| ----------- | ------------------------------ |
| `doc` | documentation |
| `example` | examples |
| `include` | headers |
| `test` | unit tests |
### More information
* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,boost-logic)
* [Report bugs](https://github.com/boostorg/logic/issues): Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing list](http://www.boost.org/community/groups.html#main). Be sure to read the [discussion policy](http://www.boost.org/community/policy.html) before posting and add the `[logic]` tag at the beginning of the subject line.

149
appveyor.yml Normal file
View File

@ -0,0 +1,149 @@
# Copyright 2016, 2017 Peter Dimov
# Copyright (C) 2017 - 2019 James E. King III
# 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)
#
# Generic Appveyor build script for boostorg repositories
# See: https://github.com/boostorg/boost-ci/
#
# Instructions for customizing this script for your library:
#
# 1. Customize the compilers and language levels you want.
# 2. If you have more than include/, src/, test/, example/, examples/,
# benchmark/ or tools/ directories, set the environment variable DEPINST.
# For example if your build uses code in "bench/" and "fog/" directories:
# - DEPINST: --include bench --include fog
# 3. Enable pull request builds in your boostorg/<library> account.
#
# That's it - the script will do everything else for you.
#
version: 1.0.{build}-{branch}
shallow_clone: true
branches:
only:
- master
- develop
- /bugfix\/.*/
- /feature\/.*/
- /fix\/.*/
- /pr\/.*/
matrix:
# Adding MAYFAIL to any matrix job allows it to fail but the build stays green:
allow_failures:
- MAYFAIL: true
environment:
global:
# see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties
# to use the default for a given environment, comment it out; recommend you build debug and release however:
# on Windows it is important to exercise all the possibilities, especially shared vs static, however most
# libraries that care about this exercise it in their Jamfiles...
# B2_ADDRESS_MODEL: address-model=64,32
# B2_LINK: link=shared,static
# B2_THREADING: threading=multi,single
B2_VARIANT: variant=release
matrix:
- FLAVOR: Visual Studio 2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
B2_ADDRESS_MODEL: address-model=64
B2_CXXFLAGS: cxxflags=-permissive-
B2_CXXSTD: latest # 2a
B2_TOOLSET: msvc-14.2
- FLAVOR: Visual Studio 2017 C++2a Strict
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_ADDRESS_MODEL: address-model=64
B2_CXXFLAGS: cxxflags=-permissive-
B2_CXXSTD: latest # 2a
B2_TOOLSET: msvc-14.1
- FLAVOR: Visual Studio 2017 C++17
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_ADDRESS_MODEL: address-model=64
B2_CXXSTD: 17
B2_TOOLSET: msvc-14.1
B2_VARIANT: variant=debug
- FLAVOR: Visual Studio 2017 C++14 (Default)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_ADDRESS_MODEL: address-model=64,32
B2_TOOLSET: msvc-14.1
- FLAVOR: clang-cl
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_ADDRESS_MODEL: address-model=64
B2_CXXSTD: 11
B2_TOOLSET: clang-win
- FLAVOR: Visual Studio 2015 C++14 (Default)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
B2_ADDRESS_MODEL: address-model=64,32
B2_TOOLSET: msvc-14.0
B2_VARIANT: variant=debug
- FLAVOR: Visual Studio 2010, 2012, 2013
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
B2_TOOLSET: msvc-10.0,msvc-11.0,msvc-12.0
MAYFAIL: true
REASON: https://github.com/boostorg/logic/issues/8
- FLAVOR: cygwin (32-bit)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin\bin;
B2_ADDRESS_MODEL: address-model=32
B2_CXXSTD: 03,11
# https://github.com/boostorg/test/issues/144
B2_DEFINES: define=_POSIX_C_SOURCE=200112L
B2_THREADING: threadapi=pthread
B2_TOOLSET: gcc
B2_VARIANT: variant=debug
- FLAVOR: cygwin (64-bit)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin64\bin;
B2_ADDRESS_MODEL: address-model=64
B2_CXXSTD: 11,17
# https://github.com/boostorg/test/issues/144
B2_DEFINES: define=_POSIX_C_SOURCE=200112L define=__USE_ISOC99
B2_THREADING: threadapi=pthread
B2_TOOLSET: gcc
- FLAVOR: mingw32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ARCH: i686
B2_ADDRESS_MODEL: address-model=32
B2_CXXSTD: 03,11
SCRIPT: ci\appveyor\mingw.bat
B2_VARIANT: variant=debug
- FLAVOR: mingw64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ARCH: x86_64
B2_ADDRESS_MODEL: address-model=64
B2_CXXSTD: 11,17
B2_DEFINES: define=__USE_ISOC99
SCRIPT: ci\appveyor\mingw.bat
install:
- set SELF=%APPVEYOR_PROJECT_NAME:-=_%
- git clone https://github.com/boostorg/boost-ci.git C:\boost-ci
- xcopy /s /e /q /i C:\boost-ci\ci .\ci
- ci\appveyor\install.bat
build: off
test_script:
- set SELF=%APPVEYOR_PROJECT_NAME:-=_%
- PATH=%ADDPATH%%PATH%
# The definition of B2_TOOLCXX omits B2_CXXSTD= if it was not defined above
- IF NOT DEFINED B2_CXXSTD (SET B2_TOOLCXX=toolset=%B2_TOOLSET%) ELSE (SET B2_TOOLCXX=toolset=%B2_TOOLSET% cxxstd=%B2_CXXSTD%)
# Echo the complete build command to the build log
- IF NOT DEFINED SCRIPT (ECHO b2 libs/%SELF:\=/% %B2_TOOLCXX% %B2_CXXFLAGS% %B2_DEFINES% %B2_THREADING% %B2_ADDRESS_MODEL% %B2_LINK% %B2_THREADING% %B2_VARIANT% -j3)
# Now go build...
- IF DEFINED SCRIPT (call libs\%SELF%\%SCRIPT%) ELSE (b2 libs/%SELF:\=/% %B2_TOOLCXX% %B2_CXXFLAGS% %B2_DEFINES% %B2_THREADING% %B2_ADDRESS_MODEL% %B2_LINK% %B2_THREADING% %B2_VARIANT% -j3)

View File

@ -1,3 +1,13 @@
# Tribool library
# Copyright (C) 2002-2003 Douglas Gregor
# Use, modification and distribution is subject to the Boost Software License,
# Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# For more information, see http://www.boost.org/
project boost-sandbox/utility/doc ;
import boostbook ;
import doxygen ;
@ -6,4 +16,21 @@ doxygen reference : [ glob ../../../boost/logic/tribool.hpp ]
[ glob ../../../boost/logic/tribool_fwd.hpp ]
[ glob ../../../boost/logic/tribool_io.hpp ]
;
boostbook tribool : tribool.boostbook ;
boostbook tribool
:
tribool.boostbook
:
<xsl:param>boost.root=../../../..
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
<dependency>reference
;
###############################################################################
alias boostdoc
: tribool/<format>docbook
:
:
: ;
explicit boostdoc ;
alias boostrelease ;
explicit boostrelease ;

View File

@ -138,6 +138,18 @@ if (<functionname>indeterminate</functionname>(x)) {
else {
// report success or failure of x
}</programlisting>
<para> All the logical operators and methods of <code><classname>tribool</classname></code> are marked
as <code>constexpr</code> in C++11. It means that <code><classname>tribool</classname></code> can
be used in compile time expressions:</para>
<programlisting>constexpr <classname>tribool</classname> x = (tribool(true) || tribool(indeterminate));
<functionname>static_assert</functionname>(x, "Must be true!");
</programlisting>
<note>Some compilers may have troubles with evaluating <code>tribool::operator safe_bool()</code> at compile time.</note>
</section>
<section>

View File

@ -14,7 +14,7 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#if BOOST_WORKAROUND(_MSC_VER, >= 1200)
#ifdef BOOST_HAS_PRAGMA_ONCE
# pragma once
#endif
@ -59,9 +59,9 @@ typedef bool (*indeterminate_keyword_t)(tribool, detail::indeterminate_t);
* \returns <tt>x.value == tribool::indeterminate_value</tt>
* \throws nothrow
*/
inline bool
BOOST_CONSTEXPR inline bool
indeterminate(tribool x,
detail::indeterminate_t dummy = detail::indeterminate_t());
detail::indeterminate_t dummy = detail::indeterminate_t()) BOOST_NOEXCEPT;
/**
* \brief A 3-state boolean type.
@ -71,6 +71,7 @@ indeterminate(tribool x,
*/
class tribool
{
#if defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS )
private:
/// INTERNAL ONLY
struct dummy {
@ -78,6 +79,7 @@ private:
};
typedef void (dummy::*safe_bool)();
#endif
public:
/**
@ -85,7 +87,7 @@ public:
*
* \throws nothrow
*/
tribool() : value(false_value) {}
BOOST_CONSTEXPR tribool() BOOST_NOEXCEPT : value(false_value) {}
/**
* Construct a new 3-state boolean value with the given boolean
@ -93,14 +95,14 @@ public:
*
* \throws nothrow
*/
tribool(bool value) : value(value? true_value : false_value) {}
BOOST_CONSTEXPR tribool(bool initial_value) BOOST_NOEXCEPT : value(initial_value? true_value : false_value) {}
/**
* Construct a new 3-state boolean value with an indeterminate value.
*
* \throws nothrow
*/
tribool(indeterminate_keyword_t) : value(indeterminate_value) {}
BOOST_CONSTEXPR tribool(indeterminate_keyword_t) BOOST_NOEXCEPT : value(indeterminate_value) {}
/**
* Use a 3-state boolean in a boolean context. Will evaluate true in a
@ -109,11 +111,22 @@ public:
* \returns true if the 3-state boolean is true, false otherwise
* \throws nothrow
*/
operator safe_bool() const
#if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS )
BOOST_CONSTEXPR explicit operator bool () const BOOST_NOEXCEPT
{
return value == true_value;
}
#else
BOOST_CONSTEXPR operator safe_bool() const BOOST_NOEXCEPT
{
return value == true_value? &dummy::nonnull : 0;
}
#endif
/**
* The actual stored value in this 3-state boolean, which may be false, true,
* or indeterminate.
@ -123,7 +136,7 @@ public:
// Check if the given tribool has an indeterminate value. Also doubles as a
// keyword for the 'indeterminate' value
inline bool indeterminate(tribool x, detail::indeterminate_t)
BOOST_CONSTEXPR inline bool indeterminate(tribool x, detail::indeterminate_t) BOOST_NOEXCEPT
{
return x.value == tribool::indeterminate_value;
}
@ -156,7 +169,7 @@ inline bool indeterminate(tribool x, detail::indeterminate_t)
* </table>
* \throws nothrow
*/
inline tribool operator!(tribool x)
BOOST_CONSTEXPR inline tribool operator!(tribool x) BOOST_NOEXCEPT
{
return x.value == tribool::false_value? tribool(true)
:x.value == tribool::true_value? tribool(false)
@ -164,7 +177,7 @@ inline tribool operator!(tribool x)
}
/**
* \brief Computes the logical conjuction of two tribools
* \brief Computes the logical conjunction of two tribools
*
* \returns the result of logically ANDing the two tribool values,
* according to the following table:
@ -196,38 +209,36 @@ inline tribool operator!(tribool x)
* </table>
* \throws nothrow
*/
inline tribool operator&&(tribool x, tribool y)
BOOST_CONSTEXPR inline tribool operator&&(tribool x, tribool y) BOOST_NOEXCEPT
{
if (static_cast<bool>(!x) || static_cast<bool>(!y))
return false;
else if (static_cast<bool>(x) && static_cast<bool>(y))
return true;
else
return indeterminate;
return (static_cast<bool>(!x) || static_cast<bool>(!y))
? tribool(false)
: ((static_cast<bool>(x) && static_cast<bool>(y)) ? tribool(true) : indeterminate)
;
}
/**
* \overload
*/
inline tribool operator&&(tribool x, bool y)
BOOST_CONSTEXPR inline tribool operator&&(tribool x, bool y) BOOST_NOEXCEPT
{ return y? x : tribool(false); }
/**
* \overload
*/
inline tribool operator&&(bool x, tribool y)
BOOST_CONSTEXPR inline tribool operator&&(bool x, tribool y) BOOST_NOEXCEPT
{ return x? y : tribool(false); }
/**
* \overload
*/
inline tribool operator&&(indeterminate_keyword_t, tribool x)
BOOST_CONSTEXPR inline tribool operator&&(indeterminate_keyword_t, tribool x) BOOST_NOEXCEPT
{ return !x? tribool(false) : tribool(indeterminate); }
/**
* \overload
*/
inline tribool operator&&(tribool x, indeterminate_keyword_t)
BOOST_CONSTEXPR inline tribool operator&&(tribool x, indeterminate_keyword_t) BOOST_NOEXCEPT
{ return !x? tribool(false) : tribool(indeterminate); }
/**
@ -263,38 +274,36 @@ inline tribool operator&&(tribool x, indeterminate_keyword_t)
* </table>
* \throws nothrow
*/
inline tribool operator||(tribool x, tribool y)
BOOST_CONSTEXPR inline tribool operator||(tribool x, tribool y) BOOST_NOEXCEPT
{
if (static_cast<bool>(!x) && static_cast<bool>(!y))
return false;
else if (static_cast<bool>(x) || static_cast<bool>(y))
return true;
else
return indeterminate;
return (static_cast<bool>(!x) && static_cast<bool>(!y))
? tribool(false)
: ((static_cast<bool>(x) || static_cast<bool>(y)) ? tribool(true) : tribool(indeterminate))
;
}
/**
* \overload
*/
inline tribool operator||(tribool x, bool y)
BOOST_CONSTEXPR inline tribool operator||(tribool x, bool y) BOOST_NOEXCEPT
{ return y? tribool(true) : x; }
/**
* \overload
*/
inline tribool operator||(bool x, tribool y)
BOOST_CONSTEXPR inline tribool operator||(bool x, tribool y) BOOST_NOEXCEPT
{ return x? tribool(true) : y; }
/**
* \overload
*/
inline tribool operator||(indeterminate_keyword_t, tribool x)
BOOST_CONSTEXPR inline tribool operator||(indeterminate_keyword_t, tribool x) BOOST_NOEXCEPT
{ return x? tribool(true) : tribool(indeterminate); }
/**
* \overload
*/
inline tribool operator||(tribool x, indeterminate_keyword_t)
BOOST_CONSTEXPR inline tribool operator||(tribool x, indeterminate_keyword_t) BOOST_NOEXCEPT
{ return x? tribool(true) : tribool(indeterminate); }
//@}
@ -331,34 +340,34 @@ inline tribool operator||(tribool x, indeterminate_keyword_t)
* </table>
* \throws nothrow
*/
inline tribool operator==(tribool x, tribool y)
BOOST_CONSTEXPR inline tribool operator==(tribool x, tribool y) BOOST_NOEXCEPT
{
if (indeterminate(x) || indeterminate(y))
return indeterminate;
else
return (x && y) || (!x && !y);
return (indeterminate(x) || indeterminate(y))
? indeterminate
: ((x && y) || (!x && !y))
;
}
/**
* \overload
*/
inline tribool operator==(tribool x, bool y) { return x == tribool(y); }
BOOST_CONSTEXPR inline tribool operator==(tribool x, bool y) BOOST_NOEXCEPT { return x == tribool(y); }
/**
* \overload
*/
inline tribool operator==(bool x, tribool y) { return tribool(x) == y; }
BOOST_CONSTEXPR inline tribool operator==(bool x, tribool y) BOOST_NOEXCEPT { return tribool(x) == y; }
/**
* \overload
*/
inline tribool operator==(indeterminate_keyword_t, tribool x)
BOOST_CONSTEXPR inline tribool operator==(indeterminate_keyword_t, tribool x) BOOST_NOEXCEPT
{ return tribool(indeterminate) == x; }
/**
* \overload
*/
inline tribool operator==(tribool x, indeterminate_keyword_t)
BOOST_CONSTEXPR inline tribool operator==(tribool x, indeterminate_keyword_t) BOOST_NOEXCEPT
{ return tribool(indeterminate) == x; }
/**
@ -394,34 +403,34 @@ inline tribool operator==(tribool x, indeterminate_keyword_t)
* </table>
* \throws nothrow
*/
inline tribool operator!=(tribool x, tribool y)
BOOST_CONSTEXPR inline tribool operator!=(tribool x, tribool y) BOOST_NOEXCEPT
{
if (indeterminate(x) || indeterminate(y))
return indeterminate;
else
return !((x && y) || (!x && !y));
return (indeterminate(x) || indeterminate(y))
? indeterminate
: !((x && y) || (!x && !y))
;
}
/**
* \overload
*/
inline tribool operator!=(tribool x, bool y) { return x != tribool(y); }
BOOST_CONSTEXPR inline tribool operator!=(tribool x, bool y) BOOST_NOEXCEPT { return x != tribool(y); }
/**
* \overload
*/
inline tribool operator!=(bool x, tribool y) { return tribool(x) != y; }
BOOST_CONSTEXPR inline tribool operator!=(bool x, tribool y) BOOST_NOEXCEPT { return tribool(x) != y; }
/**
* \overload
*/
inline tribool operator!=(indeterminate_keyword_t, tribool x)
BOOST_CONSTEXPR inline tribool operator!=(indeterminate_keyword_t, tribool x) BOOST_NOEXCEPT
{ return tribool(indeterminate) != x; }
/**
* \overload
*/
inline tribool operator!=(tribool x, indeterminate_keyword_t)
BOOST_CONSTEXPR inline tribool operator!=(tribool x, indeterminate_keyword_t) BOOST_NOEXCEPT
{ return x != tribool(indeterminate); }
} } // end namespace boost::logic
@ -452,7 +461,7 @@ namespace boost {
#define BOOST_TRIBOOL_THIRD_STATE(Name) \
inline bool \
Name(boost::logic::tribool x, \
boost::logic::detail::indeterminate_t dummy = \
boost::logic::detail::indeterminate_t = \
boost::logic::detail::indeterminate_t()) \
{ return x.value == boost::logic::tribool::indeterminate_value; }

View File

@ -11,7 +11,7 @@
#include <boost/detail/workaround.hpp>
#include <boost/noncopyable.hpp>
#if BOOST_WORKAROUND(_MSC_VER, >= 1200)
#if defined(_MSC_VER)
# pragma once
#endif
@ -45,7 +45,7 @@ template<>
inline std::basic_string<char> default_false_name<char>()
{ return "false"; }
# ifndef BOOST_NO_WCHAR_T
# if !defined(BOOST_NO_CWCHAR)
/**
* \brief Returns the wide character string L"false".
*
@ -76,7 +76,7 @@ template<>
inline std::basic_string<char> default_true_name<char>()
{ return "true"; }
# ifndef BOOST_NO_WCHAR_T
# if !defined(BOOST_NO_CWCHAR)
/**
* \brief Returns the wide character string L"true".
*
@ -104,17 +104,11 @@ template<>
inline std::basic_string<char> get_default_indeterminate_name<char>()
{ return "indeterminate"; }
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
// VC++ 6.0 chokes on the specialization below, so we're stuck without
// wchar_t support. What a pain. TODO: it might just need a the template
// parameter as function parameter...
#else
# ifndef BOOST_NO_WCHAR_T
#if !defined(BOOST_NO_CWCHAR)
/// Returns the wide character string L"indeterminate".
template<>
inline std::basic_string<wchar_t> get_default_indeterminate_name<wchar_t>()
{ return L"indeterminate"; }
# endif
#endif
// http://www.cantrip.org/locale.html
@ -140,7 +134,8 @@ public:
indeterminate_name() : name_(get_default_indeterminate_name<CharT>()) {}
/// Construct the facet with the given name for the indeterminate value
explicit indeterminate_name(const string_type& name) : name_(name) {}
explicit indeterminate_name(const string_type& initial_name)
: name_(initial_name) {}
/// Returns the name for the indeterminate value
string_type name() const { return name_; }
@ -284,9 +279,9 @@ operator>>(std::basic_istream<CharT, Traits>& in, tribool& x)
bool falsename_ok = true, truename_ok = true, othername_ok = true;
// Modeled after the code from Library DR 17
while (falsename_ok && pos < falsename.size()
|| truename_ok && pos < truename.size()
|| othername_ok && pos < othername.size()) {
while ((falsename_ok && pos < falsename.size())
|| (truename_ok && pos < truename.size())
|| (othername_ok && pos < othername.size())) {
typename Traits::int_type c = in.get();
if (c == Traits::eof())
return in;

16
index.html Normal file
View File

@ -0,0 +1,16 @@
<!--
Copyright 2011 Daniel James.
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)
-->
<html>
<head>
<meta http-equiv="refresh" content="0; URL=../../doc/html/tribool.html">
</head>
<body>
Automatic redirection failed, please go to
<a href="../../doc/html/tribool.html">../../doc/html/tribool.html</a>
</body>
</html>

15
meta/libraries.json Normal file
View File

@ -0,0 +1,15 @@
{
"key": "logic/tribool",
"name": "Tribool",
"authors": [
"Doug Gregor"
],
"description": "3-state boolean type library.",
"documentation": "/doc/html/tribool.html",
"category": [
"Miscellaneous"
],
"maintainers": [
"Douglas Gregor <dgregor -at- cs.indiana.edu>"
]
}

View File

@ -8,10 +8,55 @@
# For more information, see http://www.boost.org/
import path ;
import os ;
import regex ;
import testing ;
local self = logic ;
rule test-expected-failures
{
local all_rules = ;
local file ;
local tests_path = [ path.make $(BOOST_ROOT)/libs/$(self)/test/compile-fail ] ;
for file in [ path.glob-tree $(tests_path) : *.cpp ]
{
local rel_file = [ path.relative-to $(tests_path) $(file) ] ;
local test_name = [ regex.replace [ regex.replace $(rel_file) "/" "-" ] ".cpp" "" ] ;
local decl_test_name = cf-$(test_name) ;
# ECHO $(rel_file) ;
all_rules += [ compile-fail $(file) : : $(decl_test_name) ] ;
}
# ECHO All rules: $(all_rules) ;
return $(all_rules) ;
}
rule test-header-isolation
{
local all_rules = ;
local file ;
local headers_path = [ path.make $(BOOST_ROOT)/libs/$(self)/include ] ;
for file in [ path.glob-tree $(headers_path) : *.hpp ]
{
local rel_file = [ path.relative-to $(headers_path) $(file) ] ;
# Note: The test name starts with '~' in order to group these tests in the test report table, preferably at the end.
# All '/' are replaced with '-' because apparently test scripts have a problem with test names containing slashes.
local test_name = [ regex.replace $(rel_file) "/" "-" ] ;
local decl_test_name = ~hdr-decl-$(test_name) ;
# ECHO $(rel_file) ;
all_rules += [ compile compile/decl_header.cpp : <define>"BOOST_TEST_HEADER=$(rel_file)" <dependency>$(file) : $(decl_test_name) ] ;
}
# ECHO All rules: $(all_rules) ;
return $(all_rules) ;
}
test-suite logic :
[ test-expected-failures ]
[ test-header-isolation ]
[ run tribool_test.cpp ]
[ run tribool_rename_test.cpp ]
[ run tribool_io_test.cpp ]
;

View File

@ -0,0 +1,23 @@
// Copyright 2018 James E. King III. Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <boost/logic/tribool.hpp>
int main(int, char*[])
{
using boost::logic::indeterminate;
using boost::logic::tribool;
tribool i(indeterminate);
#if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS )
bool b = i; // expect to see: no viable conversion from 'boost::logic::tribool' to 'bool'
return (int)b;
#else
#error in c++03 explicit conversions are allowed
#endif
// NOTREACHED
return 0;
}

View File

@ -0,0 +1,16 @@
// Copyright 2018 James E. King III. Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <boost/logic/tribool.hpp>
int main(int, char*[])
{
using boost::logic::indeterminate;
using boost::logic::tribool;
tribool i(indeterminate);
return i; // expect to see: error: no viable conversion from returned value of type 'boost::logic::tribool' to function return type 'int'
}

View File

@ -0,0 +1,16 @@
// Copyright 2018 James E. King III. Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <boost/logic/tribool.hpp>
int main(int, char*[])
{
using boost::logic::indeterminate;
using boost::logic::tribool;
tribool i(indeterminate);
return i + 1; // expect to see: error: invalid operands to binary expression ('boost::logic::tribool' and 'int')
}

View File

@ -0,0 +1,16 @@
// Copyright 2018 James E. King III. Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <boost/logic/tribool.hpp>
int main(int, char*[])
{
using boost::logic::indeterminate;
using boost::logic::tribool;
tribool i(indeterminate);
return i << 1; // expect to see: error: invalid operands to binary expression ('boost::logic::tribool' and 'int')
}

View File

@ -0,0 +1,16 @@
// Copyright 2018 James E. King III. Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <boost/logic/tribool.hpp>
int main(int, char*[])
{
using boost::logic::tribool;
tribool f; // false
tribool t(true); // true
return f < t; // expect to see: error: invalid operands to binary expression ('boost::logic::tribool' and 'boost::logic::tribool')
}

View File

@ -0,0 +1,15 @@
// Copyright 2018 James E. King III. Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <boost/logic/tribool.hpp>
int main(int, char*[])
{
using boost::logic::tribool;
tribool t(true);
return t < 1; // expect to see: error: invalid operands to binary expression ('boost::logic::tribool' and 'int')
}

View File

@ -0,0 +1,24 @@
/*
* Copyright Andrey Semashev 2015.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
/*!
* \file decl_header.cpp
* \author Andrey Semashev
* \date 21.06.2015
*
* \brief This file contains a test boilerplate for checking that every
* public header is self-contained and does not have any missing
* #includes.
*/
#define BOOST_TEST_INCLUDE_HEADER() <BOOST_TEST_HEADER>
#include BOOST_TEST_INCLUDE_HEADER()
int main(int, char*[])
{
return 0;
}

View File

@ -20,6 +20,18 @@ int test_main(int, char*[])
tribool x;
#if !defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_STD_WSTRING)
std::wostringstream wout;
wout << std::boolalpha << tribool(false);
BOOST_CHECK(wout.str() == L"false");
wout.str(std::wstring());
wout << std::boolalpha << tribool(true);
BOOST_CHECK(wout.str() == L"true");
wout.str(std::wstring());
wout << std::boolalpha << tribool(indeterminate);
BOOST_CHECK(wout.str() == L"indeterminate");
#endif
// Check tribool output
std::ostringstream out;

View File

@ -3,6 +3,7 @@
// 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 <boost/logic/tribool.hpp>
#include <boost/test/minimal.hpp>
#include <iostream>
@ -15,6 +16,19 @@ int test_main(int, char*[])
tribool y(true); // true
tribool z(indeterminate); // indeterminate
#if defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS )
// c++03 allows for implicit conversion to bool
// c++11 uses an explicit conversion operator so this would not compile
// and that is tested in the compile-fail/implicit.cpp file
// so we check the conversion to ensure it is sane
bool bx = x;
BOOST_CHECK(bx == false);
bool by = y;
BOOST_CHECK(by == true);
bool bz = z;
BOOST_CHECK(bz == false);
#endif
BOOST_CHECK(!x);
BOOST_CHECK(x == false);
BOOST_CHECK(false == x);
@ -114,6 +128,27 @@ int test_main(int, char*[])
BOOST_CHECK(false);
}
#if !defined(BOOST_NO_CXX11_CONSTEXPR)
constexpr bool res_ors = indeterminate(false || tribool(false) || false || indeterminate); // true
BOOST_CHECK(res_ors);
char array_ors[res_ors ? 2 : 3];
BOOST_CHECK(sizeof(array_ors) / sizeof(char) == 2);
constexpr bool res_ands = !indeterminate(!(true && tribool(true) && true && indeterminate)); // false
BOOST_CHECK(!res_ands);
char array_ands[res_ands ? 2 : 3];
BOOST_CHECK(sizeof(array_ands) / sizeof(char) == 3);
constexpr bool res_safe_bool = static_cast<bool>( tribool(true) );
BOOST_STATIC_ASSERT(res_safe_bool);
// gcc 4.6 chokes on the xxx assignment
# if !BOOST_WORKAROUND(BOOST_GCC, < 40700)
constexpr tribool xxx = (tribool(true) || tribool(indeterminate));
BOOST_STATIC_ASSERT(xxx);
# endif
#endif
std::cout << "no errors detected\n";
return 0;
}