Squashed 'third_party/boostorg/predef/' content from commit 560ff52

Change-Id: Ib7804ff2c768e0d597993b019146292dfb41e9dc
git-subtree-dir: third_party/boostorg/predef
git-subtree-split: 560ff5298ead78276872604f1ee6523e63a4fa90
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..3e84d7c
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,96 @@
+* text=auto !eol svneol=native#text/plain
+*.gitattributes text svneol=native#text/plain
+
+# Scriptish formats
+*.bat        text svneol=native#text/plain
+*.bsh        text svneol=native#text/x-beanshell
+*.cgi        text svneol=native#text/plain
+*.cmd        text svneol=native#text/plain
+*.js         text svneol=native#text/javascript
+*.php        text svneol=native#text/x-php
+*.pl         text svneol=native#text/x-perl
+*.pm         text svneol=native#text/x-perl
+*.py         text svneol=native#text/x-python
+*.sh         eol=lf svneol=LF#text/x-sh
+configure    eol=lf svneol=LF#text/x-sh
+
+# Image formats
+*.bmp        binary svneol=unset#image/bmp
+*.gif        binary svneol=unset#image/gif
+*.ico        binary svneol=unset#image/ico
+*.jpeg       binary svneol=unset#image/jpeg
+*.jpg        binary svneol=unset#image/jpeg
+*.png        binary svneol=unset#image/png
+*.tif        binary svneol=unset#image/tiff
+*.tiff       binary svneol=unset#image/tiff
+*.svg        text svneol=native#image/svg%2Bxml
+
+# Data formats
+*.pdf        binary svneol=unset#application/pdf
+*.avi        binary svneol=unset#video/avi
+*.doc        binary svneol=unset#application/msword
+*.dsp        text svneol=crlf#text/plain
+*.dsw        text svneol=crlf#text/plain
+*.eps        binary svneol=unset#application/postscript
+*.gz         binary svneol=unset#application/gzip
+*.mov        binary svneol=unset#video/quicktime
+*.mp3        binary svneol=unset#audio/mpeg
+*.ppt        binary svneol=unset#application/vnd.ms-powerpoint
+*.ps         binary svneol=unset#application/postscript
+*.psd        binary svneol=unset#application/photoshop
+*.rdf        binary svneol=unset#text/rdf
+*.rss        text svneol=unset#text/xml
+*.rtf        binary svneol=unset#text/rtf
+*.sln        text svneol=native#text/plain
+*.swf        binary svneol=unset#application/x-shockwave-flash
+*.tgz        binary svneol=unset#application/gzip
+*.vcproj     text svneol=native#text/xml
+*.vcxproj    text svneol=native#text/xml
+*.vsprops    text svneol=native#text/xml
+*.wav        binary svneol=unset#audio/wav
+*.xls        binary svneol=unset#application/vnd.ms-excel
+*.zip        binary svneol=unset#application/zip
+
+# Text formats
+.htaccess    text svneol=native#text/plain
+*.bbk        text svneol=native#text/xml
+*.cmake      text svneol=native#text/plain
+*.css        text svneol=native#text/css
+*.dtd        text svneol=native#text/xml
+*.htm        text svneol=native#text/html
+*.html       text svneol=native#text/html
+*.ini        text svneol=native#text/plain
+*.log        text svneol=native#text/plain
+*.mak        text svneol=native#text/plain
+*.qbk        text svneol=native#text/plain
+*.rst        text svneol=native#text/plain
+*.sql        text svneol=native#text/x-sql
+*.txt        text svneol=native#text/plain
+*.xhtml      text svneol=native#text/xhtml%2Bxml
+*.xml        text svneol=native#text/xml
+*.xsd        text svneol=native#text/xml
+*.xsl        text svneol=native#text/xml
+*.xslt       text svneol=native#text/xml
+*.xul        text svneol=native#text/xul
+*.yml        text svneol=native#text/plain
+boost-no-inspect text svneol=native#text/plain
+CHANGES      text svneol=native#text/plain
+COPYING      text svneol=native#text/plain
+INSTALL      text svneol=native#text/plain
+Jamfile      text svneol=native#text/plain
+Jamroot      text svneol=native#text/plain
+Jamfile.v2   text svneol=native#text/plain
+Jamrules     text svneol=native#text/plain
+Makefile*    text svneol=native#text/plain
+README       text svneol=native#text/plain
+TODO         text svneol=native#text/plain
+
+# Code formats
+*.c          text svneol=native#text/plain
+*.cpp        text svneol=native#text/plain
+*.h          text svneol=native#text/plain
+*.hpp        text svneol=native#text/plain
+*.ipp        text svneol=native#text/plain
+*.tpp        text svneol=native#text/plain
+*.jam        text svneol=native#text/plain
+*.java       text svneol=native#text/plain
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c12bf46
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/bin
+/boost-build.jam
+project-config.jam
diff --git a/.project b/.project
new file mode 100644
index 0000000..2f7b668
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Boost Predef</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.python.pydev.PyDevBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.python.pydev.pythonNature</nature>
+	</natures>
+</projectDescription>
diff --git a/.pydevproject b/.pydevproject
new file mode 100644
index 0000000..d001f0a
--- /dev/null
+++ b/.pydevproject
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?eclipse-pydev version="1.0"?><pydev_project>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
+</pydev_project>
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..dbd1ff7
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,109 @@
+# 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)
+#
+# Copyright Rene Rivera 2015-2016.
+
+# Setting up notifications like this is optional as the default behavior
+# of Travis is to notify the commiter of problems. But setting a specific
+# recipient this way ensures you get all the communications about the
+# builds.
+notifications:
+  email:
+    recipients:
+      - grafikrobot@gmail.com
+
+# For now the CI scripts only support the two main branches available
+# on the boost super-project.
+branches:
+  only:
+    - master
+    - develop
+
+# We specify a generic language instead of C++ as Travis sets up
+# additional environment vars that point to its default toolset
+# instead of the one we install. The extra env doesn't interfere,
+# but at the same time it's misleading. So to avoid confusion and
+# possible unseen side effects we stick with no C++ default setup.
+language: generic
+
+# Speficy the default as Linux here, to avoid duplication in the matrix
+# below. We use Trausty as that's the latest we can use. And it's better
+# supported by the whole range of C++ toolsets we like to test on.
+dist: trusty
+os: linux
+
+# Because we install our own toolsets and other software we need
+# to run the sudo support.
+sudo: required
+
+# Travis has a long standing bug with their rather complicated
+# build matrix evaluation that causes empty jobs to be created.
+# This global matrix entry in combination with the exclusion
+# below works around that bug. This is the suggested fix from
+# the Travis support people.
+env:
+  matrix:
+    - TRAVIS_EMPTY_JOB_WORKAROUND=true
+
+# This lists all the toolsets we will test with the Boost CI
+# scripts. Predef needs to check all of them as its job is to
+# distiguish between all of them. For other libraries you would
+# want to limit the list to the toolsets that are important
+# for that.
+matrix:
+  exclude:
+    - env: TRAVIS_EMPTY_JOB_WORKAROUND=true
+  include:
+    - env: TOOLSET=clang-3.4
+    - env: TOOLSET=clang-3.5
+    - env: TOOLSET=clang-3.6
+    - env: TOOLSET=clang-3.7
+    - env: TOOLSET=clang-3.8
+    - env: TOOLSET=clang-3.9
+    - env: TOOLSET=clang-4.0
+    - env: TOOLSET=clang-5.0
+    - env: TOOLSET=gcc-4.7
+    - env: TOOLSET=gcc-4.8
+    - env: TOOLSET=gcc-4.9
+    - env: TOOLSET=gcc-5
+    - env: TOOLSET=gcc-6
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=c++03
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=c++11
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=c++14
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=c++1z
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++03
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++11
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++14
+    - env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++1z
+    - env: TOOLSET=xcode-6.1
+      os: osx
+    - env: TOOLSET=xcode-6.4
+      os: osx
+      osx_image: xcode6.4
+    - env: TOOLSET=xcode-7.3
+      os: osx
+      osx_image: xcode7.3
+    - env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++03
+      os: osx
+      osx_image: xcode8.3
+    - env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++11
+      os: osx
+      osx_image: xcode8.3
+    - env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++14
+      os: osx
+      osx_image: xcode8.3
+    - env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++1z
+      os: osx
+      osx_image: xcode8.3
+
+install: python "${TRAVIS_BUILD_DIR}/tools/ci/library_test.py" install
+before_script: python "${TRAVIS_BUILD_DIR}/tools/ci/library_test.py" before_script
+script: python "${TRAVIS_BUILD_DIR}/tools/ci/library_test.py" script
+before_cache: python "${TRAVIS_BUILD_DIR}/tools/ci/library_test.py" before_cache
+after_success: python "${TRAVIS_BUILD_DIR}/tools/ci/library_test.py" after_success
+after_failure: python "${TRAVIS_BUILD_DIR}/tools/ci/library_test.py" after_failure
+after_script: python "${TRAVIS_BUILD_DIR}/tools/ci/library_test.py" after_script
+cache:
+  directories:
+    - $HOME/boostorg/boost
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..644347e
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,149 @@
+# 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)
+#
+# Copyright Rene Rivera 2015-2016.
+
+# Set up notifications so that the maintainers of the library get
+# build status messages.
+notifications:
+  - provider: Email
+    to:
+      - grafikrobot@gmail.com
+    on_build_status_changed: true
+
+# This lists all the toolsets we will test with the Boost CI
+# scripts. Predef needs to check all of them as its job is to
+# distiguish between all of them. For other libraries you would
+# want to limit the list to the toolsets that are important
+# for that.
+#
+# This also includes setting up how to create the cache. We
+# opt for slightly better compression and solid archives.
+# As we have a lot of files in the boost tree which is what
+# we are putting in the cache.
+environment:
+  APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z -m0=lzma2 -mx=3
+  matrix:
+  - TOOLSET: vs-2008
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2010
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2012
+    platform: 32
+  - TOOLSET: vs-2012
+    COMMENT: UWP DESKTOP
+    CXXFLAGS: /D_WIN32_WINNT=0x0602 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2012
+    COMMENT: UWP STORE
+    CXXFLAGS: /D_WIN32_WINNT=0x0602 /DWINAPI_FAMILY=WINAPI_FAMILY_APP
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2013
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2013
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2013
+    COMMENT: UWP DESKTOP
+    CXXFLAGS: /D_WIN32_WINNT=0x0603 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2013
+    COMMENT: UWP PHONE
+    CXXFLAGS: /D_WIN32_WINNT=0x0603 /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2013
+    COMMENT: UWP STORE
+    CXXFLAGS: /D_WIN32_WINNT=0x0603 /DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2015
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2015
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: vs-2017
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    CXXFLAGS: /std:c++14
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    CXXFLAGS: /std:c++latest
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    COMMENT: UWP DESKTOP
+    CXXFLAGS: /D_WIN32_WINNT=0x0A00 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    COMMENT: UWP PHONE
+    CXXFLAGS: /D_WIN32_WINNT=0x0A00 /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    COMMENT: UWP STORE
+    CXXFLAGS: /D_WIN32_WINNT=0x0A00 /DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    COMMENT: UWP SERVER
+    CXXFLAGS: /D_WIN32_WINNT=0x0A00 /DWINAPI_FAMILY=WINAPI_FAMILY_SERVER
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: vs-2017
+    COMMENT: UWP SYSTEM
+    CXXFLAGS: /D_WIN32_WINNT=0x0A00 /DWINAPI_FAMILY=WINAPI_FAMILY_SYSTEM
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
+  - TOOLSET: mingw-5
+    platform: 32
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: mingw64-6
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: mingw64-6
+    COMMENT: UWP DESKTOP
+    CXXFLAGS: -D_WIN32_WINNT=0x0602 -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+  - TOOLSET: mingw64-6
+    COMMENT: UWP STORE
+    CXXFLAGS: -D_WIN32_WINNT=0x0602 -DWINAPI_FAMILY=WINAPI_FAMILY_APP
+    platform: 64
+    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
+
+# We can also set up configurations for testing which map to
+# the b2 build variants.
+configuration:
+  - debug
+  - release
+
+# No need to test PR branch as the PR itself is already tested.
+skip_branch_with_pr: true
+
+init:
+  - cd %APPVEYOR_BUILD_FOLDER%
+install: python tools/ci/library_test.py install
+before_build: python tools/ci/library_test.py before_build
+build_script: python tools/ci/library_test.py build_script
+after_build: python tools/ci/library_test.py after_build
+before_test: python tools/ci/library_test.py before_test
+test_script: python tools/ci/library_test.py test_script
+after_test: python tools/ci/library_test.py after_test
+on_success: python tools/ci/library_test.py on_success
+on_failure: python tools/ci/library_test.py on_failure
+on_finish: python tools/ci/library_test.py on_finish
diff --git a/build.jam b/build.jam
new file mode 100644
index 0000000..5ee09af
--- /dev/null
+++ b/build.jam
@@ -0,0 +1,6 @@
+# Copyright Rene Rivera 2014
+# 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)
+
+path-constant BOOST_PREDEF_ROOT : . ;
diff --git a/check/predef.jam b/check/predef.jam
new file mode 100644
index 0000000..7042dc1
--- /dev/null
+++ b/check/predef.jam
@@ -0,0 +1,17 @@
+# Copyright Rene Rivera 2016
+# 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)
+
+# Hack, to reload check/predef.jam at its new location.
+import modules ;
+local _loaded_ ;
+for local _module_ in [ modules.peek modules : .loaded ]
+{
+    if $(_module_) != "predef"
+    {
+        _loaded_ += $(_module_) ;
+    }
+}
+modules.poke modules : .loaded : $(_loaded_) ;
+import ../tools/check/predef ;
diff --git a/doc/.gitignore b/doc/.gitignore
new file mode 100644
index 0000000..ac7af2e
--- /dev/null
+++ b/doc/.gitignore
@@ -0,0 +1 @@
+/html/
diff --git a/doc/build.jam b/doc/build.jam
new file mode 100644
index 0000000..8558f75
--- /dev/null
+++ b/doc/build.jam
@@ -0,0 +1,100 @@
+# Copyright Rene Rivera 2011-2016
+# 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)
+
+using quickbook ;
+using boostbook ;
+import path ;
+
+if ! $(BOOST_ROOT)
+{
+    BOOST_ROOT = [ modules.peek : BOOST_ROOT ] ;
+}
+
+if $(BOOST_PREDEF_ROOT)
+{
+    path-constant BOOST_PREDEF_INCLUDE_ROOT : $(BOOST_PREDEF_ROOT)/include ;
+}
+else
+{
+    path-constant BOOST_PREDEF_INCLUDE_ROOT : $(BOOST_ROOT) ;
+}
+
+local BOOST_PREDEF_HEADERS = [ path.glob-tree $(BOOST_PREDEF_INCLUDE_ROOT)/boost/predef : *.h ] ;
+
+# Intermediate targets..
+
+# Quickbok to boostbook target.
+xml predef
+    :
+        predef.qbk
+    :
+        <dependency>$(BOOST_PREDEF_INCLUDE_ROOT)/boost/predef.h
+        <dependency>$(BOOST_PREDEF_HEADERS)
+    ;
+explicit predef ;
+
+# HTML dependencies for standalone docs.
+install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ] : <location>html/images ;
+explicit images ;
+install callouts : [ glob $(BOOST_ROOT)/doc/src/images/callouts/*.png ] : <location>html/images/callouts ;
+explicit callouts ;
+install css : [ glob $(BOOST_ROOT)/doc/src/*.css ] : <location>html ;
+explicit css ;
+
+# Default target builds standalone docs.
+boostbook standalone
+    :
+        predef
+    :
+        <xsl:param>boost.root=../../../..
+        #<xsl:param>generate.section.toc.level=3
+        <xsl:param>chunk.section.depth=2
+        <xsl:param>chunk.first.sections=1
+    
+        <dependency>images
+        <dependency>callouts
+        <dependency>css
+    ;
+
+###############################################################################
+### Targets for Boost release integration.
+###############################################################################
+
+# Target for Boost global documentation integration.
+#
+# For documentation that will be integrated into the global documentation
+# this should be an alias similar to:
+#
+#   alias boostdoc : my_lib : : : <implicit-dependency>my_lib_boostbook_xml ;
+#   explicit boostdoc ;
+#
+# For documentation that is not part of the global documentation, i.e.
+# it has stadalone documentation, it should be an empty alias:
+#
+#   alias boostdoc ;
+#   explicit boostdoc ;
+#
+alias boostdoc : predef ;
+explicit boostdoc ;
+
+# Target for Boost standalone release documentation building.
+#
+# For documentation that is not part of the global Boost documentation
+# this should be an alias to building the "standalone" documentation.
+# Usual this is just an alias to a "stadalone" target:
+#
+#   alias boostrelease : stadalone ;
+#   explicit boostrelease ;
+#
+# For documentation that is part of the global Boost documentation this
+# should be an empty alias:
+#
+#   alias boostrelease ;
+#   explicit boostrelease ;
+#
+alias boostrelease ;
+explicit boostrelease ;
+
+###############################################################################
diff --git a/doc/hardware_simd.qbk b/doc/hardware_simd.qbk
new file mode 100644
index 0000000..c613310
--- /dev/null
+++ b/doc/hardware_simd.qbk
@@ -0,0 +1,89 @@
+SIMD predefs depend on compiler options. For example, you will have to add the
+option `-msse3` to clang or gcc to enable SSE3. SIMD predefs are also inclusive.
+This means that if SSE3 is enabled, then every other extensions with a lower
+version number will implicitly be enabled and detected. However, some extensions
+are CPU specific, they may not be detected nor enabled when an upper version is
+enabled.
+
+[note SSE(1) and SSE2 are automatically enabled by default when using x86-64
+architecture.]
+
+To check if any SIMD extension has been enabled, you can use:
+
+``
+#include <boost/predef/hardware/simd.h>
+#include <iostream>
+
+int main()
+{
+#if defined(BOOST_HW_SIMD_AVAILABLE)
+    std::cout << "SIMD detected!" << std::endl;
+#endif
+    return 0;
+}
+``
+
+When writing SIMD specific code, you may want to check if a particular extension
+has been detected. To do so you have to use the right architecture predef and
+compare it. Those predef are of the form `BOOST_HW_SIMD_"ARCH"` (where `"ARCH"`
+is either `ARM`, `PPC`, or `X86`). For example, if you compile code for x86
+architecture, you will have to use `BOOST_HW_SIMD_X86`. Its value will be the
+version number of the most recent SIMD extension detected for the architecture.
+
+To check if an extension has been enabled:
+
+``
+#include <boost/predef/hardware/simd.h>
+#include <iostream>
+
+int main()
+{
+#if BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_SSE3_VERSION
+    std::cout << "This is SSE3!" << std::endl;
+#endif
+    return 0;
+}
+``
+
+[note The *_VERSION* defines that map version number to actual real
+identifiers. This way it is easier to write comparisons without messing up with
+version numbers.]
+
+To *"stricly"* check the most recent detected extension:
+
+``
+#include <boost/predef/hardware/simd.h>
+#include <iostream>
+
+int main()
+{
+#if BOOST_HW_SIMD_X86 == BOOST_HW_SIMD_X86_SSE3_VERSION
+    std::cout << "This is SSE3 and this is the most recent enabled extension!"
+        << std::endl;
+#endif
+    return 0;
+}
+``
+
+Because of the version systems of predefs and of the inclusive property of SIMD
+extensions macros, you can easily check for ranges of supported extensions:
+
+``
+#include <boost/predef/hardware/simd.h>
+#include <iostream>
+
+int main()
+{
+#if BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_SSE2_VERSION &&\
+    BOOST_HW_SIMD_X86 <= BOOST_HW_SIMD_X86_SSSE3_VERSION
+    std::cout << "This is SSE2, SSE3 and SSSE3!" << std::endl;
+#endif
+    return 0;
+}
+``
+
+[note Unlike gcc and clang, Visual Studio does not allow you to specify precisely
+the SSE variants you want to use, the only detections that will take place are
+SSE, SSE2, AVX and AVX2. For more informations,
+    see [@https://msdn.microsoft.com/en-us/library/b0084kay.aspx here].]
+
diff --git a/doc/history.qbk b/doc/history.qbk
new file mode 100644
index 0000000..7ad7b8e
--- /dev/null
+++ b/doc/history.qbk
@@ -0,0 +1,93 @@
+[/
+Copyright 2014-2016 Rene Rivera
+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)
+]
+
+[section History]
+
+[heading 1.8]
+
+* Add support for __ARM_ARCH macro. (from Tim Blechmann)
+* Add detection for PTX architecture. (from Benjamin Worpitz)
+* Add nvcc compiler detection. (from Benjamin Worpitz)
+* Add support for detecting CUDA. (from Benjamin Worpitz)
+* Remove reference to obsolete BOOST_ARCH_AMD64. (from Peter Kolbus)
+
+[heading 1.7]
+
+* Fix BOOST_ARCH_PARISK/BOOST_ARCH_PARISC typo.
+* Improved Windows Universal Platform detection. (from James E. King, III)
+* Add detection for CloudABI with cloudlibc. (from James E. King, III)
+
+[heading 1.6]
+
+* Fix Intel C/C++ version 9999 detection to be 12.1.0.
+* Addition of `BOOST_PREDEF_WORKAROUND` and `BOOST_PREDEF_TESTED_AT` macros
+  for defect workarounds and detection.
+* Add ARM64 MSVC SIMD detection. (from Minmin Gong)
+* Add detection of iOS simulator vs device as a platform choice. (from Ruslan
+  Baratov)
+* Fix MinGW incorrect header guard. (from Ruslan Baratov)
+
+[heading 1.5]
+
+* Fix Intel C/C++ compiler version specification.
+* Add `BOOST_VERSION_NUMBER_MAJOR`, `BOOST_VERSION_NUMBER_MINOR`,
+  `BOOST_VERSION_NUMBER_PATCH` macros to extract components from valid version
+  numbers.
+* Change VS version numbering. Version after VS2015 will use the compiler
+  version instead of the varied product versions.
+
+[heading 1.4.1]
+
+* Small fixes for some redefinition errors, and mispelled macros.
+* Slightly rearrangement of structure to comply with current library requirements.
+
+[heading 1.4]
+
+* Add detection of SIMD hardware. With the addition of the `BOOST_HW_*`
+  category (from Charly Chevalier).
+* Add compile only version of check utilities to address cross-compile
+  use cases. And changed the BBv2 check support to use compile only checks.
+* Fix test warnings.
+* Fix typos on `AVAILABLE` macros for Windows Platform. (from Vemund Handeland)
+
+[heading 1.3]
+
+* Fix many problems with `predef_check` functionality.
+* Update SunPro detection to accomodate latest version of compiler from Oracle.
+* Addition of Travis-CI and Appveyor testing.
+* Add `and` and `or` logical operators for `predef_check` expression on the Boost Build side.
+* Fix `BOOST_ARCH_PARISC` to correctly spelled name (from Graham Hanson).
+* Fix `MAKE_YYYYM` macros to correctly limit the month (from rick68).
+
+[heading 1.2]
+
+* Account for skip in Visual Studio product version vs. compiler version.
+  This supports version of VS 2015 an onward.
+* Add detection of Haiku OS (from Jessica Hamilton).
+* Some fixes to endian detection for Android (from mstahl-at-redhat.com).
+* Add missing `BOOST_PREDEF_MAKE_0X_VVRRPP` macro (from Erik Lindahl).
+* Add `predef_check` program and BBv2 integration for build configuration
+  checks.
+
+[heading 1.1]
+
+* Addition of `BOOST_PLAT_*` platform definitions for MinGW and
+  Windows platform variants.
+* Detection of ARM architecture for Windows compilers to target
+  mobile devices of Windows 8.
+* Improved ARM detection for 64 bit ARM.
+* Added detection of iOS an an operating system.
+* Improved detection of endianess on some platforms.
+* Addition of exclusive plus emulated definitions for platform
+  and compiler detection.
+
+[warning The big change for this version is the restructuring of the
+definitions to avoid duplicate definitions in one category. That is, only one
+`BOOST_OS_*`, `BOOST_COMP_*`, and `BOOST_PLAT_*` variant will be detected
+(except for sub-categories).]
+
+[endsect]
diff --git a/doc/predef.qbk b/doc/predef.qbk
new file mode 100644
index 0000000..4e8b79b
--- /dev/null
+++ b/doc/predef.qbk
@@ -0,0 +1,734 @@
+[article Boost.Predef
+    [quickbook 1.7]
+    [version 1.7]
+    [authors [Rivera, Rene]]
+    [copyright 2005-2016 Rene Rivera]
+    [copyright 2015 Charly Chevalier]
+    [copyright 2015 Joel Falcou]
+    [purpose Identification and specification of predefined macros.]
+    [license
+        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])
+    ]
+    [source-mode c++]
+    [category miscellaneous]
+    [id predef]
+    [dirname predef]
+]
+
+[section Introduction]
+
+This library defines a set of compiler, architecture, operating system,
+library, and other version numbers from the information it can gather of
+C, C++, Objective C, and Objective C++ predefined macros or those defined
+in generally available headers. The idea for this library grew out of a
+proposal to extend the Boost Config library to provide more, and consistent,
+information than the feature definitions it supports. What follows is
+an edited version of that brief proposal.
+
+[heading Proposal]
+
+The idea is to define a set of macros to identify compilers and
+consistently represent their version. This includes:
+
+* A unique BOOST_VERSION_NUMBER(major,minor,patch) macro to specify version
+  numbers (unfortunately, the name BOOST_VERSION is already taken to designate
+  the version number of boost itself).
+* A compiler identification macro, suitable for use in `#if`/`#elif` directives,
+  for each of the supported compilers. All macros would be defined, regardless
+  of the compiler. The one macro corresponding to the compiler being used would
+  be defined, in terms of BOOST_VERSION_NUMBER, to carry the exact compiler
+  version. All other macros would expand to an expression evaluating to false
+  (for instance, the token 0) to indicate that the corresponding compiler is not
+  present.
+* "Null values" could be set, for all macros, in
+  boost/config/select_compiler.hpp; then, for each compiler the corresponding
+  identification macro would be #undef and re-#defined in the corresponding
+  boost/compiler/(cc).hpp; however in the context of the Boost.Config
+  infrastructure using a "prefix" header (to be introduced) or
+  boost/config/suffix.hpp is a better solution.
+
+[heading Current Library]
+
+The current Predef library is now, both an independent library, and expanded
+in scope. It includes detection and definition of architectures, compilers,
+languages, libraries, operating systems, and endianness. The key benefits are:
+
+* Version numbers that are always defined so that one doesn't have to guard
+  with `#ifdef`.
+* Guard macros that can be used for `#ifdef` checks.
+* All possible definitions are included with the single `#include <boost/predef.h>`
+  so that it's friendly to precompiled header usage.
+* Specific definitions can be included, ex. `#include <boost/predef/os/windows.h>`
+  for single checks.
+* Predefs can be directly used in both preprocessor and compiler expressions
+  for comparison to other similarly defined values.
+* The headers are usable from multiple languages, that support the C preprocessor.
+  In particular C++, C, Objective C, and Objective C++.
+
+[heading Design choices]
+
+An important design choice concerns how to represent compiler versions by means
+of a single integer number suitable for use in preprocessing directives. Let's
+do some calculation. The "basic" signed type for preprocessing
+constant-expressions is long in C90 (and C++, as of 2006) and intmax_t in C99.
+The type long shall at least be able to represent the number [^+2 147 483 647].
+This means the most significant digit can only be 0, 1 or 2; and if we want all
+decimal digits to be able to vary between 0 and 9, the largest range we can
+consider is [^\[0, 999 999 999\]]. Distributing evenly, this means 3 decimal
+digits for each version number part.
+
+So we can:
+
+# use an uneven distribution or
+# use more bits (a larger type) or
+# use 3/3/3 and have the particular compiler/platform/stdlib deal with setting
+  the numbers within the 3-digit range.
+
+It appears relatively safe to go for the first option and set it at 2/2/5. That
+covers CodeWarrior and others, which are up to and past 10 for the major number.
+Some compilers use the build number in lieu of the patch one; five digits
+(which is already reached by VC++ 8) seems a reasonable limit even in this case.
+
+[note A 2/2/6 scheme would allow for bigger patch/build numbers at the cost,
+for instance, of limiting the major version number to 20 (or, with further
+constraints, to 21).]
+
+It might reassure the reader that this decision is actually encoded in one place
+in the code; the definition of `BOOST_VERSION_NUMBER`.
+
+[heading Future work]
+
+Even though the basics of this library are done, there is much work that can be
+done:
+
+* Right now we limit the detection of libraries to known built-in predefined
+  macros, and to guaranteed to exist system and library headers. It might be
+  interesting to add something like auto-configuration predefs. This way we can
+  add definitions for user specific libraries and features.
+* Along with the above, it might be good to add some user control as to which
+  headers are included with the top-level header. Although in the current
+  form of the library this is less of an issue as one can include the
+  specific headers one needs.
+* Additionally, even if there is no auto-configure style option.. It would be
+  good to add optionally included headers so that user can get consistent
+  version number definitions for libraries they use.
+* And obviously there's lots of work to do in reformulating the existing
+  Boost libraries to use the Predef library.
+* And there's the continuing work of adding definitions for present and
+  future compilers, platforms, architectures, languages, and libraries.
+
+[endsect] [/Introduction]
+
+[section Using the predefs]
+
+To use the automatically defined predefs one needs to only include the
+single top-level header:
+
+``
+  #include <boost/predef.h>
+``
+
+This defines [*all] the version macros known to the library. For each
+macro it will be defined to either a /zero/ valued expression for when
+the particular item is not detected, and to a /positive/ value if it
+is detected. The predef macros fall onto five categories each with
+macros of a particular prefix:
+
+* `BOOST_ARCH_`for system/CPU architecture one is compiling for.
+* `BOOST_COMP_` for the compiler one is using.
+* `BOOST_LANG_` for language standards one is compiling against.
+* `BOOST_LIB_C_` and `BOOST_LIB_STD_` for the C and C++ standard library
+  in use.
+* `BOOST_OS_` for the operating system we are compiling to.
+* `BOOST_PLAT_` for platforms on top of operating system or compilers.
+* `BOOST_ENDIAN_` for endianness of the os and architecture combination.
+* `BOOST_HW_` for hardware specific features.
+* `BOOST_HW_SIMD` for SIMD (Single Instruction Multiple Data) detection.
+
+[note The detected definitions are for the configuration one is targeting
+during the compile. In particular in a cross-compile this means the target
+system, and not the host system.]
+
+One uses the individual definitions to compare against specific versions
+by comparing against the `BOOST_VERSION_NUMBER` macro. For example, to make
+a choice based on the version of the GCC C++ compiler one would:
+
+``
+  #include <boost/predef.h>
+  #include <iostream>
+
+  int main()
+  {
+    if (BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(4,0,0))
+      std::cout << "GCC compiler is at least version 4.0.0" << std::endl;
+    else
+      std::cout << "GCC compiler is at older than version 4.0.0, or not a GCC compiler" << std::endl;
+    return 0;
+  }
+``
+
+As you might notice above the `else` clause also covers the case where
+the particular compiler is not detected. But one can make the test
+also test for the detection. All predef definitions are defined
+as a zero (0) expression when not detected. Hence one could use the
+detection with a natural single condition. For example:
+
+``
+  #include <boost/predef.h>
+  #include <iostream>
+
+  int main()
+  {
+    if (BOOST_COMP_GNUC)
+      std::cout << "This is GNU GCC!" << std::endl;
+    else
+      std::cout << "Not GNU GCC." << std::endl;
+    return 0;
+  }
+``
+
+And since the predef's are preprocessor definitions the same is possible
+from the preprocessor:
+
+``
+  #include <boost/predef.h>
+  #include <iostream>
+
+  #if BOOST_COMP_GNUC
+    #if BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(4,0,0)
+      const char * the_compiler = "GNU GCC, of at least version 4."
+    #else
+      const char * the_compiler = "GNU GCC, less than version 4."
+    #endif
+  #else
+    const char * the_compiler = "Not GNU GCC."
+  #endif
+  
+  int main()
+  {
+    std::cout << the_compiler << std::endl;
+    return 0;
+  }
+``
+
+In addition, for each version macro defined there is an
+`*_AVAILABLE` macro defined only when the particular aspect is
+detected. I.e. a definition equivalent to:
+
+``
+  #if BOOST_PREDEF_ABC
+    #define BOOST_PREDEF_ABC_AVAILABLE
+  #endif
+``
+
+Also for each aspect there is a macro defined with a descriptive
+name of what the detection is.
+
+[heading The `*_EMULATED` macros]
+
+Predef definitions are guaranteed to be uniquely detected within one category.
+But there are contexts under which multiple underlying detections are possible.
+The well known example of this is detection of GCC and MSVC compilers which are
+commonly emulated by other compilers by defining the same base macros. To
+account for this detection headers are allowed to define `*_EMULATED` predefs
+when this situation is detected. The emulated predefs will be set to the
+version number of the detection instead of the regular predef macro for that
+detection. For example MSVC will set `BOOST_COMP_MSVC_EMULATED` but not set `BOOST_COM_MSVC`, and it will also set `BOOST_COMP_MSVC_AVAILABLE`.
+
+[heading Using the `BOOST_VERSION_NUMBER` macro]
+
+All the predefs are defined to be a use of the `BOOST_VERSION_NUMBER` macro.
+The macro takes individual major, minor, and patch value expressions:
+
+``
+  #define BOOST_VERSION_NUMBER( major, minor, patch ) ...
+``
+
+The arguments are:
+
+# Major version number, as a constant value expression in the range [0,99].
+# Minor version number, as a constant value expression in the range [0,99].
+# Patch-level version number, as a constant value expression in the
+  range [0,99999].
+
+The ranges for each are "enforced" by the use of a modulo ("%"), i.e. truncation,
+as opposed to a clamp. And hence this means that the limits are enforced only
+enough to keep from having out-of-range problems. But not enough to prevent
+other kinds of problems. Like exceeding the range and getting false detections,
+or non-detections. It is up to the individual predefs to ensure correct
+usage beyond the range guarantee.
+
+The values for the arguments can be any preprocessor valid constant value expression.
+Only constant value arithmetic is used in the definition of the `BOOST_VERSION_NUMBER`
+macro and in any of the other predef macros. This means that any allowed base is
+possible, i.e. binary, octal, decimal, and hexadecimal. For example:
+
+``
+  #define MY_APPLICATION_VERSION_NUMBER BOOST_VERSION_NUMBER(2,0xA,015)
+``
+
+Is equivalent to:
+
+``
+  #define MY_APPLICATION_VERSION_NUMBER BOOST_VERSION_NUMBER(2,10,13)
+``
+
+[endsect]
+
+[section Adding new predefs]
+
+We know that a library like this one will be an eternal work-in-progress. And
+as such we expect, and look forward to, others contributing corrections and
+additions to the predefs. With that in mind we need to keep a consistent way
+of defining the new predefs. Hence all current, and future, predefs follow
+the same structure and requirements.
+
+[heading Requirements of the header]
+
+All predefs need to follow a set of requirements:
+
+* The headers must use the Boost Software License.
+* The predef must, by default, be defined as `BOOST_VERSION_NUMBER_NOT_AVAILABLE`.
+* The predef must be redefined to a non-zero value once detected.
+* The predef must, by default, be defined to `BOOST_VERSION_NUMBER_AVAILABLE`
+  when the predef is detected.
+* If possible, the predef will be defined as the version number detected.
+* The predef must define `*_AVAILABLE` macros as needed.
+* The predef must define a symbolic constant string name macro.
+* The predef must declare itself, after being defined, for the testing
+  system.
+* The predef must guarantee that it is the only one defined as detected
+  per category.
+* But a predef can define `*_EMULATED` macros to indicate that it was
+  previously detected by another header and is being "emulated" by the
+  system. Note that the `*_AVAILABLE` macros must still be defined in this
+  situation.
+
+And there are some extra guidelines that predef headers should follow:
+
+* The detection should avoid including extra headers that might otherwise
+  not be included by default.
+* If the detection must include a header, prefer guarding it within the
+  detection if possible.
+* If the detection must include headers unconditionally, and has a choice
+  of headers to include, prefer the ones with the least impact. I.e.
+  include the one with the minimal set of definitions and other
+  dependencies.
+
+[heading Structure of the header]
+
+For general consistency it's suggested that new predef headers follow the
+structure below, as current predef headers do. First we have the copyright
+and license statement, followed by the include guard:
+
+``
+/*
+Copyright Jane Doe YYYY
+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)
+*/
+
+#ifndef BOOST_PREDEF_category_tag_H
+#define BOOST_PREDEF_category_tag_H
+``
+
+If the detection depends on the detection of another predef you should
+include those headers here.
+
+``
+#include <boost/predef/CATEGORY_TAG/DEPENDENCY.h>
+``
+
+Depending on how you are defining the predef you will at minimum have
+to include the `version_number.h` header. But you might also want to
+include the `make.h` header for the version number decomposing utility
+macros:
+
+``
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+``
+
+The Predef library uses Quickbook for documentation and for the
+individual predefs to appear in the reference section we add in-code
+documentation followed by the zero-value default definition of the
+predef macro. We strongly recommend this particular placement of the
+documentation and default definition because some development
+environments automatically interpret this and provide in-line help
+for the macro. In particular this works for the popular Eclipse IDE:
+
+``
+/*`
+[heading `BOOST_category_tag`]
+
+Documentation about what is detected.
+*/
+
+#define BOOST_category_tag BOOST_VERSION_NUMBER_NOT_AVAILABLE
+``
+
+Next is the detection and definition of the particular predef. The
+structure for this is to do a single overall check (`condition_a`) and
+place further version detection inside this. The first action inside
+the overall check is to "`#undef BOOST_category_tag`" which undefines
+the zero-value default. The rest is up to the you how to do the checks
+for defining the version. But at minimum it must
+"`#define BOOST_category_tag BOOST_VERSION_NUMBER_AVAILABLE`" as the fallback
+to minimally indicate that the predef was detected:
+
+``
+#if (condition_a)
+#   undef BOOST_category_tag
+#   if (condition_b)
+#        define BOOST_category_tag BOOST_VERSION_NUMBER(major,minor,patch)
+#    else
+#        define BOOST_category_tag BOOST_VERSION_NUMBER_AVAILABLE
+#    endif
+#endif
+``
+
+We also need to provide the `*_AVAILABLE` versions of the predef.
+
+``
+#if BOOST_category_tag
+#   define BOOST_category_tag_AVAILABLE
+#endif
+``
+
+And for convenience we also want to provide a `*_NAME` macro:
+
+``
+#define BOOST_catagory_tag_NAME "Name"
+``
+
+The testing of the predef macros is automated to generate checks for all
+the defined predefs, whether detected or not. To do this we need to
+declare the predef to the test system. This declaration is empty for
+regular use. And during the test programs they expand out specially
+to create informational output:
+
+``
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_category_tag,BOOST_category_tag_NAME)
+``
+
+And, of course, we last need to close out the include guard:
+
+``
+#endif
+``
+
+[heading Adding exclusive predefs]
+
+For headers of predefs that need to be mutually exclusive in the detection
+we need to add checks and definitions to detect when the predef is
+detected by multiple headers.
+
+Internally compiler, operating system, and platforms define
+`BOOST_PREDEF_DETAIL_COMP_DETECTED`, `BOOST_PREDEF_DEFAIL_OS_DETECTED`, and
+`BOOST_PREDEF_DETAIL_PLAT_DETECTED` respectively when the predef is first
+detected. This is used to guard against multiple definition of the detection
+in later included headers. In those cases the detection would instead be
+written as:
+
+``
+#if !BOOST_PREDEF_DETAIL_category_DETECTED && (condition_a)
+#   undef BOOST_category_tag
+#   if (condition_b)
+#        define BOOST_category_tag BOOST_VERSION_NUMBER(major,minor,patch)
+#    else
+#        define BOOST_category_tag BOOST_VERSION_NUMBER(0,0,1)
+#    endif
+#endif
+``
+
+And we also include a header that defines the `*_DETECTED` macro when we have
+the detection:
+
+``
+#if BOOST_category_tag
+#   define BOOST_category_tag_AVAILABLE
+#   include <boost/predef/detail/CATEGORY_detected.h>
+#endif
+``
+
+Everything else about the header is the same as the basic detection header.
+
+[heading Adding an exclusive but emulated predef]
+
+Because compilers are frequently emulated by other compilers we both want
+to have exclusive detection of the compiler and also provide information
+that we detected the emulation of the compiler. To accomplish this we define
+a local `*_DETECTION` macro for the compiler detection. And conditionally
+define either the base compiler predef `BOOST_COMP_compiler` or the alternate
+`BOOST_COMP_compiler_EMULATED` predef.
+
+The initial detection would look like:
+
+``
+#if (condition_a)
+#   if (condition_b)
+#        define BOOST_COMP_tag_DETECTION BOOST_VERSION_NUMBER(major,minor,patch)
+#    else
+#        define BOOST_COMP_tag_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#    endif
+#endif
+``
+
+And then we can conditionally define the base or emulated predefs:
+
+``
+#ifdef BOOST_COMP_tag_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_tag_EMULATED BOOST_COMP_tag_DETECTION
+#   else
+#       undef BOOST_COMP_tag
+#       define BOOST_COMP_tag BOOST_COMP_tag_DETECTION
+#   endif
+#   define BOOST_category_tag_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+``
+
+[heading Using utility pattern macros]
+
+By including:
+
+``
+#include <boost/predef/make.h>
+``
+
+One will get a set of utility macros to decompose common version
+macros as defined by compilers. For example the EDG compiler
+uses a simple 3-digit version macro (M,N,P). It can be decomposed
+and defined as:
+
+``
+#define BOOST_CCOMP_EDG BOOST_PREDEF_MAKE_N_N_N(__EDG_VERSION__)
+``
+
+The decomposition macros are split into three types: decimal
+decomposition, hexadecimal decomposition, and date decomposition.
+They follow the format of using "N" for decimal, "F" for hexadecimal,
+and "Y", "M", "D" for dates.
+
+[endsect]
+
+[def __predef_symbol__ Symbol]
+[def __predef_version__ Version]
+[def __predef_detection__ *detection*]
+
+[section Reference]
+
+[section `BOOST_ARCH` architecture macros]
+[include ../include/boost/predef/architecture/*.h]
+[include ../include/boost/predef/architecture/x86/*.h]
+[endsect]
+
+[section `BOOST_COMP` compiler macros]
+[include ../include/boost/predef/compiler/*.h]
+[endsect]
+
+[section `BOOST_LANG` language standards macros]
+[include ../include/boost/predef/language/*.h]
+[endsect]
+
+[section `BOOST_LIB` library macros]
+[include ../include/boost/predef/library/c/*.h]
+[include ../include/boost/predef/library/std/*.h]
+[endsect]
+
+[section `BOOST_OS` operating system macros]
+[include ../include/boost/predef/os/*.h]
+[include ../include/boost/predef/os/bsd/*.h]
+[endsect]
+
+[section `BOOST_PLAT` platform macros]
+[include ../include/boost/predef/platform/*.h]
+[endsect]
+
+[section `BOOST_HW` hardware macros]
+[include ../include/boost/predef/hardware/*.h]
+[endsect]
+
+[section Other macros]
+[include ../include/boost/predef/other/*.h]
+[endsect]
+
+[section Version definition macros]
+[include ../include/boost/predef/version_number.h]
+[include ../include/boost/predef/make.h]
+[endsect]
+
+[endsect]
+
+[section Check Utilities]
+
+The `predef_check` utility provides a facility for building a
+program that will check a given set of expressions against
+the definitions it detected when it was built.
+
+[heading [^predef_check] programs]
+
+Even though there is only one `predef_check` program, there
+are variations for each of the languages that are detected
+by Predef to match the convention for sources files. For all
+of them one invokes with a list of expression arguments. The
+expressions are evaluated within the context of the particular
+[^predef_check] program and if they all are true zero (0) is returned.
+Otherwise the index of the first false expression is returned.
+
+The expression syntax is simple:
+
+[teletype]
+``
+predef-definition [ relational-operator version-value ]
+``
+[c++]
+
+[~predef-definition] can be any of the Predef definitions. For
+example `BOOST_COMP_GCC`.
+
+[~relational-operator] can be any of: [^>], [^<], [^>=], [^<=],
+[^==] and [^!=].
+
+[~version-number] can be a full or partial version triplet value.
+If it's a partial version triple it is completed with zeros. That
+is [^x.y] is equivalent to [^x.y.0] and [^x] is equivalent to
+[^x.0.0].
+
+The [~relations-operator] and [~version-number] can be ommited. In
+which case it is equivalent to:
+
+[teletype]
+``
+predef-definition > 0.0.0
+``
+[c++]
+
+[heading Using with Boost.Build]
+
+You can use the [^predef_check] programs directly from Boost Build
+to configure target requirements. This is useful for controlling
+what gets built as part of your project based on the detailed
+version information available in Predef. The basic use is simple:
+
+[teletype]
+``
+import path-to-predef-src/tools/check/predef
+    : check require
+    : predef-check predef-require ;
+
+exe my_windows_program : windows_source.cpp
+    : [ predef-require "BOOST_OS_WINDOWS" ] ;
+``
+[c++]
+
+That simple use case will skip building the [^my_windows_program]
+unless one is building for Windows. Like the direct [^predef_check]
+you can pass mutiple expressions using relational comparisons.
+For example:
+
+[teletype]
+``
+import path-to-predef-src/tools/check/predef
+    : check require
+    : predef-check predef-require ;
+
+lib my_special_lib : source.cpp
+    : [ predef-require "BOOST_OS_WINDOWS != 0" "BOOST_OS_VMS != 0"] ;
+``
+[c++]
+
+And in that case the [^my_special_lib] is built only when the OS is
+not Windows or VMS. The [^requires] rule is a special case of the
+[^check] rule. And is defined in terms of it:
+
+[teletype]
+``
+rule require ( expressions + : language ? )
+{
+    return [ check $(expressions) : $(language) : : <build>no ] ;
+}
+``
+[c++]
+
+The expression can also use explicit "and", "or" logical operators
+to for more complex checks:
+
+
+[teletype]
+``
+import path-to-predef-src/tools/check/predef
+    : check require
+    : predef-check predef-require ;
+
+lib my_special_lib : source.cpp
+    : [ predef-require "BOOST_OS_WINDOWS" or "BOOST_OS_VMS"] ;
+``
+[c++]
+
+You can use the [^check] rule for more control and to implement
+something other than control of what gets built. The definition
+for the [^check] rule is:
+
+[teletype]
+``
+rule check ( expressions + : language ? : true-properties * : false-properties * )
+``
+[c++]
+
+When invoked as a reuirement of a Boost Build target this rule
+will add the [^true-properties] to the target if all the [^expressions]
+evaluate to true. Otherwise the [^false-properties] get added as
+requirements. For example you could use it to enable or disable
+features in your programs:
+
+[teletype]
+``
+import path-to-predef-src/tools/check/predef
+    : check require
+    : predef-check predef-require ;
+
+exe my_special_exe : source.cpp
+    : [ predef-check "BOOST_OS_WINDOWS == 0"
+        : : <define>ENABLE_WMF=0
+        : <define>ENABLE_WMF=1 ] ;
+``
+[c++]
+
+For both [^check] and [^require] the [^language] argument controls
+which variant of the [^predef_check] program is used to check the
+expressions. It defaults to "c++", but can be any of: "c", "cpp",
+"objc", and "objcpp".
+
+[endsect]
+
+[include history.qbk]
+[include todo.qbk]
+
+[section Acknoledgements]
+
+The comprehensiveness of this library would not be
+possible without the existence of the indispensable
+resource that is the
+[@http://sourceforge.net/p/predef/ Pre-defined C/C++ Compiler Macros]
+Project. It was, and continues to be, the primary source
+of the definitions that make up this library. Thanks
+to Bjorn Reese and all the volunteers that make that
+resource possible.
+
+This library would be an incoherent mess if it weren't for
+Boost community that provided invaluable feedback for the
+eight years that it took to polish into a useable form.
+In particular I would like to thank: Mathias Gaunard,
+Robert Stewart, Joël Lamotte, Lars Viklund, Nathan Ridge,
+Artyom Beilis, Joshua Boyce, Gottlob Frege, Thomas Heller,
+Edward Diener, Dave Abrahams, Iain Denniston, Dan Price,
+Ioannis Papadopoulos, and Robert Ramey. And thanks to
+Joel Falcou for managing the review of this library.
+
+[endsect]
diff --git a/doc/todo.qbk b/doc/todo.qbk
new file mode 100644
index 0000000..ea50d20
--- /dev/null
+++ b/doc/todo.qbk
@@ -0,0 +1,12 @@
+[/
+Copyright 2014-2017 Rene Rivera
+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)
+]
+
+[section To Do]
+
+* Improve reference documentation.
+
+[endsect]
diff --git a/include/boost/detail/endian.hpp b/include/boost/detail/endian.hpp
new file mode 100644
index 0000000..f576c26
--- /dev/null
+++ b/include/boost/detail/endian.hpp
@@ -0,0 +1,11 @@
+// Copyright 2013 Rene Rivera
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_ENDIAN_HPP
+#define BOOST_DETAIL_ENDIAN_HPP
+
+// Use the Predef library for the detection of endianess.
+#include <boost/predef/detail/endian_compat.h>
+
+#endif
diff --git a/include/boost/predef.h b/include/boost/predef.h
new file mode 100644
index 0000000..4965337
--- /dev/null
+++ b/include/boost/predef.h
@@ -0,0 +1,24 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#if !defined(BOOST_PREDEF_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_H
+#define BOOST_PREDEF_H
+#endif
+
+#include <boost/predef/language.h>
+#include <boost/predef/architecture.h>
+#include <boost/predef/compiler.h>
+#include <boost/predef/library.h>
+#include <boost/predef/os.h>
+#include <boost/predef/other.h>
+#include <boost/predef/platform.h>
+#include <boost/predef/hardware.h>
+
+#include <boost/predef/version.h>
+
+#endif
diff --git a/include/boost/predef/architecture.h b/include/boost/predef/architecture.h
new file mode 100644
index 0000000..120d557
--- /dev/null
+++ b/include/boost/predef/architecture.h
@@ -0,0 +1,33 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#if !defined(BOOST_PREDEF_ARCHITECTURE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_ARCHITECTURE_H
+#define BOOST_PREDEF_ARCHITECTURE_H
+#endif
+
+#include <boost/predef/architecture/alpha.h>
+#include <boost/predef/architecture/arm.h>
+#include <boost/predef/architecture/blackfin.h>
+#include <boost/predef/architecture/convex.h>
+#include <boost/predef/architecture/ia64.h>
+#include <boost/predef/architecture/m68k.h>
+#include <boost/predef/architecture/mips.h>
+#include <boost/predef/architecture/parisc.h>
+#include <boost/predef/architecture/ppc.h>
+#include <boost/predef/architecture/ptx.h>
+#include <boost/predef/architecture/pyramid.h>
+#include <boost/predef/architecture/rs6k.h>
+#include <boost/predef/architecture/sparc.h>
+#include <boost/predef/architecture/superh.h>
+#include <boost/predef/architecture/sys370.h>
+#include <boost/predef/architecture/sys390.h>
+#include <boost/predef/architecture/x86.h>
+#include <boost/predef/architecture/z.h>
+/*#include <boost/predef/architecture/.h>*/
+
+#endif
diff --git a/include/boost/predef/architecture/alpha.h b/include/boost/predef/architecture/alpha.h
new file mode 100644
index 0000000..5bcade1
--- /dev/null
+++ b/include/boost/predef/architecture/alpha.h
@@ -0,0 +1,59 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_ALPHA_H
+#define BOOST_PREDEF_ARCHITECTURE_ALPHA_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_ALPHA`]
+
+[@http://en.wikipedia.org/wiki/DEC_Alpha DEC Alpha] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+    [[`__alpha__`] [__predef_detection__]]
+    [[`__alpha`] [__predef_detection__]]
+    [[`_M_ALPHA`] [__predef_detection__]]
+
+    [[`__alpha_ev4__`] [4.0.0]]
+    [[`__alpha_ev5__`] [5.0.0]]
+    [[`__alpha_ev6__`] [6.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__alpha__) || defined(__alpha) || \
+    defined(_M_ALPHA)
+#   undef BOOST_ARCH_ALPHA
+#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev4__)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev5__)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(5,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev6__)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(6,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ALPHA)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_ALPHA
+#   define BOOST_ARCH_ALPHA_AVAILABLE
+#endif
+
+#define BOOST_ARCH_ALPHA_NAME "DEC Alpha"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ALPHA,BOOST_ARCH_ALPHA_NAME)
diff --git a/include/boost/predef/architecture/arm.h b/include/boost/predef/architecture/arm.h
new file mode 100644
index 0000000..96f89c8
--- /dev/null
+++ b/include/boost/predef/architecture/arm.h
@@ -0,0 +1,80 @@
+/*
+Copyright Rene Rivera 2008-2015
+Copyright Franz Detro 2014
+Copyright (c) Microsoft Corporation 2014
+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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_ARM_H
+#define BOOST_PREDEF_ARCHITECTURE_ARM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_ARM`]
+
+[@http://en.wikipedia.org/wiki/ARM_architecture ARM] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__arm__`] [__predef_detection__]]
+    [[`__arm64`] [__predef_detection__]]
+    [[`__thumb__`] [__predef_detection__]]
+    [[`__TARGET_ARCH_ARM`] [__predef_detection__]]
+    [[`__TARGET_ARCH_THUMB`] [__predef_detection__]]
+    [[`_M_ARM`] [__predef_detection__]]
+    [[`_M_ARM64`] [__predef_detection__]]
+
+    [[`__arm64`] [8.0.0]]
+    [[`__TARGET_ARCH_ARM`] [V.0.0]]
+    [[`__TARGET_ARCH_THUMB`] [V.0.0]]
+    [[`__ARM_ARCH`] [V.0.0]]
+    [[`_M_ARM`] [V.0.0]]
+    [[`_M_ARM64`] [8.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \
+    defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \
+    defined(__ARM_ARCH) || \
+    defined(_M_ARM) || defined(_M_ARM64)
+#   undef BOOST_ARCH_ARM
+#   if !defined(BOOST_ARCH_ARM) && defined(__arm64)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_ARM)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_ARM,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_THUMB)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(__ARM_ARCH)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__ARM_ARCH,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(_M_ARM64)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(_M_ARM)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(_M_ARM,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_ARM
+#   define BOOST_ARCH_ARM_AVAILABLE
+#endif
+
+#define BOOST_ARCH_ARM_NAME "ARM"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ARM,BOOST_ARCH_ARM_NAME)
diff --git a/include/boost/predef/architecture/blackfin.h b/include/boost/predef/architecture/blackfin.h
new file mode 100644
index 0000000..84c58a2
--- /dev/null
+++ b/include/boost/predef/architecture/blackfin.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2013-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_BLACKFIN_H
+#define BOOST_PREDEF_ARCHITECTURE_BLACKFIN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_BLACKFIN`]
+
+Blackfin Processors from Analog Devices.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__bfin__`] [__predef_detection__]]
+    [[`__BFIN__`] [__predef_detection__]]
+    [[`bfin`] [__predef_detection__]]
+    [[`BFIN`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__bfin__) || defined(__BFIN__) || \
+    defined(bfin) || defined(BFIN)
+#   undef BOOST_ARCH_BLACKFIN
+#   define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_BLACKFIN
+#   define BOOST_ARCH_BLACKFIN_AVAILABLE
+#endif
+
+#define BOOST_ARCH_BLACKFIN_NAME "Blackfin"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_BLACKFIN,BOOST_ARCH_BLACKFIN_NAME)
diff --git a/include/boost/predef/architecture/convex.h b/include/boost/predef/architecture/convex.h
new file mode 100644
index 0000000..ac783a9
--- /dev/null
+++ b/include/boost/predef/architecture/convex.h
@@ -0,0 +1,65 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_CONVEX_H
+#define BOOST_PREDEF_ARCHITECTURE_CONVEX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_CONVEX`]
+
+[@http://en.wikipedia.org/wiki/Convex_Computer Convex Computer] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__convex__`] [__predef_detection__]]
+
+    [[`__convex_c1__`] [1.0.0]]
+    [[`__convex_c2__`] [2.0.0]]
+    [[`__convex_c32__`] [3.2.0]]
+    [[`__convex_c34__`] [3.4.0]]
+    [[`__convex_c38__`] [3.8.0]]
+    ]
+ */
+
+#define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__convex__)
+#   undef BOOST_ARCH_CONVEX
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c1__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c2__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c32__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,2,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c34__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,4,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c38__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,8,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_CONVEX
+#   define BOOST_ARCH_CONVEX_AVAILABLE
+#endif
+
+#define BOOST_ARCH_CONVEX_NAME "Convex Computer"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_CONVEX,BOOST_ARCH_CONVEX_NAME)
diff --git a/include/boost/predef/architecture/ia64.h b/include/boost/predef/architecture/ia64.h
new file mode 100644
index 0000000..9b1972b
--- /dev/null
+++ b/include/boost/predef/architecture/ia64.h
@@ -0,0 +1,49 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_IA64_H
+#define BOOST_PREDEF_ARCHITECTURE_IA64_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_IA64`]
+
+[@http://en.wikipedia.org/wiki/Ia64 Intel Itanium 64] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__ia64__`] [__predef_detection__]]
+    [[`_IA64`] [__predef_detection__]]
+    [[`__IA64__`] [__predef_detection__]]
+    [[`__ia64`] [__predef_detection__]]
+    [[`_M_IA64`] [__predef_detection__]]
+    [[`__itanium__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__ia64__) || defined(_IA64) || \
+    defined(__IA64__) || defined(__ia64) || \
+    defined(_M_IA64) || defined(__itanium__)
+#   undef BOOST_ARCH_IA64
+#   define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_IA64
+#   define BOOST_ARCH_IA64_AVAILABLE
+#endif
+
+#define BOOST_ARCH_IA64_NAME "Intel Itanium 64"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_IA64,BOOST_ARCH_IA64_NAME)
diff --git a/include/boost/predef/architecture/m68k.h b/include/boost/predef/architecture/m68k.h
new file mode 100644
index 0000000..63ed5f8
--- /dev/null
+++ b/include/boost/predef/architecture/m68k.h
@@ -0,0 +1,82 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_M68K_H
+#define BOOST_PREDEF_ARCHITECTURE_M68K_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_M68K`]
+
+[@http://en.wikipedia.org/wiki/M68k Motorola 68k] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__m68k__`] [__predef_detection__]]
+    [[`M68000`] [__predef_detection__]]
+
+    [[`__mc68060__`] [6.0.0]]
+    [[`mc68060`] [6.0.0]]
+    [[`__mc68060`] [6.0.0]]
+    [[`__mc68040__`] [4.0.0]]
+    [[`mc68040`] [4.0.0]]
+    [[`__mc68040`] [4.0.0]]
+    [[`__mc68030__`] [3.0.0]]
+    [[`mc68030`] [3.0.0]]
+    [[`__mc68030`] [3.0.0]]
+    [[`__mc68020__`] [2.0.0]]
+    [[`mc68020`] [2.0.0]]
+    [[`__mc68020`] [2.0.0]]
+    [[`__mc68010__`] [1.0.0]]
+    [[`mc68010`] [1.0.0]]
+    [[`__mc68010`] [1.0.0]]
+    [[`__mc68000__`] [0.0.1]]
+    [[`mc68000`] [0.0.1]]
+    [[`__mc68000`] [0.0.1]]
+    ]
+ */
+
+#define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__m68k__) || defined(M68000)
+#   undef BOOST_ARCH_M68K
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68060__) || defined(mc68060) || defined(__mc68060))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(6,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68040__) || defined(mc68040) || defined(__mc68040))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68030__) || defined(mc68030) || defined(__mc68030))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68020__) || defined(mc68020) || defined(__mc68020))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68010__) || defined(mc68010) || defined(__mc68010))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68000__) || defined(mc68000) || defined(__mc68000))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#   if !defined(BOOST_ARCH_M68K)
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_M68K
+#   define BOOST_ARCH_M68K_AVAILABLE
+#endif
+
+#define BOOST_ARCH_M68K_NAME "Motorola 68k"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_M68K,BOOST_ARCH_M68K_NAME)
diff --git a/include/boost/predef/architecture/mips.h b/include/boost/predef/architecture/mips.h
new file mode 100644
index 0000000..0189d7d
--- /dev/null
+++ b/include/boost/predef/architecture/mips.h
@@ -0,0 +1,73 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_MIPS_H
+#define BOOST_PREDEF_ARCHITECTURE_MIPS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_MIPS`]
+
+[@http://en.wikipedia.org/wiki/MIPS_architecture MIPS] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__mips__`] [__predef_detection__]]
+    [[`__mips`] [__predef_detection__]]
+    [[`__MIPS__`] [__predef_detection__]]
+
+    [[`__mips`] [V.0.0]]
+    [[`_MIPS_ISA_MIPS1`] [1.0.0]]
+    [[`_R3000`] [1.0.0]]
+    [[`_MIPS_ISA_MIPS2`] [2.0.0]]
+    [[`__MIPS_ISA2__`] [2.0.0]]
+    [[`_R4000`] [2.0.0]]
+    [[`_MIPS_ISA_MIPS3`] [3.0.0]]
+    [[`__MIPS_ISA3__`] [3.0.0]]
+    [[`_MIPS_ISA_MIPS4`] [4.0.0]]
+    [[`__MIPS_ISA4__`] [4.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__mips__) || defined(__mips) || \
+    defined(__MIPS__)
+#   undef BOOST_ARCH_MIPS
+#   if !defined(BOOST_ARCH_MIPS) && (defined(__mips))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(__mips,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS1) || defined(_R3000))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS2) || defined(__MIPS_ISA2__) || defined(_R4000))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS3) || defined(__MIPS_ISA3__))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS4) || defined(__MIPS_ISA4__))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS)
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_MIPS
+#   define BOOST_ARCH_MIPS_AVAILABLE
+#endif
+
+#define BOOST_ARCH_MIPS_NAME "MIPS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_MIPS,BOOST_ARCH_MIPS_NAME)
diff --git a/include/boost/predef/architecture/parisc.h b/include/boost/predef/architecture/parisc.h
new file mode 100644
index 0000000..c75a1f3
--- /dev/null
+++ b/include/boost/predef/architecture/parisc.h
@@ -0,0 +1,64 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_PARISC_H
+#define BOOST_PREDEF_ARCHITECTURE_PARISC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PARISC`]
+
+[@http://en.wikipedia.org/wiki/PA-RISC_family HP/PA RISC] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__hppa__`] [__predef_detection__]]
+    [[`__hppa`] [__predef_detection__]]
+    [[`__HPPA__`] [__predef_detection__]]
+
+    [[`_PA_RISC1_0`] [1.0.0]]
+    [[`_PA_RISC1_1`] [1.1.0]]
+    [[`__HPPA11__`] [1.1.0]]
+    [[`__PA7100__`] [1.1.0]]
+    [[`_PA_RISC2_0`] [2.0.0]]
+    [[`__RISC2_0__`] [2.0.0]]
+    [[`__HPPA20__`] [2.0.0]]
+    [[`__PA8000__`] [2.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__hppa__) || defined(__hppa) || defined(__HPPA__)
+#   undef BOOST_ARCH_PARISC
+#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_0))
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_1) || defined(__HPPA11__) || defined(__PA7100__))
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,1,0)
+#   endif
+#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC2_0) || defined(__RISC2_0__) || defined(__HPPA20__) || defined(__PA8000__))
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_PARISC)
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_PARISC
+#   define BOOST_ARCH_PARISC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PARISC_NAME "HP/PA RISC"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PARISC,BOOST_ARCH_PARISC_NAME)
diff --git a/include/boost/predef/architecture/ppc.h b/include/boost/predef/architecture/ppc.h
new file mode 100644
index 0000000..e8c57c9
--- /dev/null
+++ b/include/boost/predef/architecture/ppc.h
@@ -0,0 +1,72 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_PPC_H
+#define BOOST_PREDEF_ARCHITECTURE_PPC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PPC`]
+
+[@http://en.wikipedia.org/wiki/PowerPC PowerPC] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__powerpc`] [__predef_detection__]]
+    [[`__powerpc__`] [__predef_detection__]]
+    [[`__POWERPC__`] [__predef_detection__]]
+    [[`__ppc__`] [__predef_detection__]]
+    [[`_M_PPC`] [__predef_detection__]]
+    [[`_ARCH_PPC`] [__predef_detection__]]
+    [[`__PPCGECKO__`] [__predef_detection__]]
+    [[`__PPCBROADWAY__`] [__predef_detection__]]
+    [[`_XENON`] [__predef_detection__]]
+
+    [[`__ppc601__`] [6.1.0]]
+    [[`_ARCH_601`] [6.1.0]]
+    [[`__ppc603__`] [6.3.0]]
+    [[`_ARCH_603`] [6.3.0]]
+    [[`__ppc604__`] [6.4.0]]
+    [[`__ppc604__`] [6.4.0]]
+    ]
+ */
+
+#define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__powerpc) || defined(__powerpc__) || \
+    defined(__POWERPC__) || defined(__ppc__) || \
+    defined(_M_PPC) || defined(_ARCH_PPC) || \
+    defined(__PPCGECKO__) || defined(__PPCBROADWAY__) || \
+    defined(_XENON)
+#   undef BOOST_ARCH_PPC
+#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc601__) || defined(_ARCH_601))
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,1,0)
+#   endif
+#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc603__) || defined(_ARCH_603))
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,3,0)
+#   endif
+#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc604__) || defined(__ppc604__))
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,4,0)
+#   endif
+#   if !defined (BOOST_ARCH_PPC)
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_PPC
+#   define BOOST_ARCH_PPC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PPC_NAME "PowerPC"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PPC,BOOST_ARCH_PPC_NAME)
diff --git a/include/boost/predef/architecture/ptx.h b/include/boost/predef/architecture/ptx.h
new file mode 100644
index 0000000..335517b
--- /dev/null
+++ b/include/boost/predef/architecture/ptx.h
@@ -0,0 +1,44 @@
+/*
+Copyright Benjamin Worpitz 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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_PTX_H
+#define BOOST_PREDEF_ARCHITECTURE_PTX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PTX`]
+
+[@https://en.wikipedia.org/wiki/Parallel_Thread_Execution PTX] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__CUDA_ARCH__`] [__predef_detection__]]
+
+    [[`__CUDA_ARCH__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_ARCH_PTX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__CUDA_ARCH__)
+#   undef BOOST_ARCH_PTX
+#   define BOOST_ARCH_PTX BOOST_PREDEF_MAKE_10_VR0(__CUDA_ARCH__)
+#endif
+
+#if BOOST_ARCH_PTX
+#   define BOOST_ARCH_PTX_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PTX_NAME "PTX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PTX,BOOST_ARCH_PTX_NAME)
diff --git a/include/boost/predef/architecture/pyramid.h b/include/boost/predef/architecture/pyramid.h
new file mode 100644
index 0000000..4f13253
--- /dev/null
+++ b/include/boost/predef/architecture/pyramid.h
@@ -0,0 +1,42 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_PYRAMID_H
+#define BOOST_PREDEF_ARCHITECTURE_PYRAMID_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PYRAMID`]
+
+Pyramid 9810 architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`pyr`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(pyr)
+#   undef BOOST_ARCH_PYRAMID
+#   define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_PYRAMID
+#   define BOOST_ARCH_PYRAMID_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PYRAMID_NAME "Pyramid 9810"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PYRAMID,BOOST_ARCH_PYRAMID_NAME)
diff --git a/include/boost/predef/architecture/rs6k.h b/include/boost/predef/architecture/rs6k.h
new file mode 100644
index 0000000..8a6e9b6
--- /dev/null
+++ b/include/boost/predef/architecture/rs6k.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_RS6K_H
+#define BOOST_PREDEF_ARCHITECTURE_RS6K_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_RS6000`]
+
+[@http://en.wikipedia.org/wiki/RS/6000 RS/6000] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__THW_RS6000`] [__predef_detection__]]
+    [[`_IBMR2`] [__predef_detection__]]
+    [[`_POWER`] [__predef_detection__]]
+    [[`_ARCH_PWR`] [__predef_detection__]]
+    [[`_ARCH_PWR2`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__THW_RS6000) || defined(_IBMR2) || \
+    defined(_POWER) || defined(_ARCH_PWR) || \
+    defined(_ARCH_PWR2)
+#   undef BOOST_ARCH_RS6000
+#   define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_RS6000
+#   define BOOST_ARCH_RS6000_AVAILABLE
+#endif
+
+#define BOOST_ARCH_RS6000_NAME "RS/6000"
+
+#define BOOST_ARCH_PWR BOOST_ARCH_RS6000
+
+#if BOOST_ARCH_PWR
+#   define BOOST_ARCH_PWR_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PWR_NAME BOOST_ARCH_RS6000_NAME
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_RS6000,BOOST_ARCH_RS6000_NAME)
diff --git a/include/boost/predef/architecture/sparc.h b/include/boost/predef/architecture/sparc.h
new file mode 100644
index 0000000..a89a510
--- /dev/null
+++ b/include/boost/predef/architecture/sparc.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SPARC_H
+#define BOOST_PREDEF_ARCHITECTURE_SPARC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SPARC`]
+
+[@http://en.wikipedia.org/wiki/SPARC SPARC] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sparc__`] [__predef_detection__]]
+    [[`__sparc`] [__predef_detection__]]
+
+    [[`__sparcv9`] [9.0.0]]
+    [[`__sparcv8`] [8.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sparc__) || defined(__sparc)
+#   undef BOOST_ARCH_SPARC
+#   if !defined(BOOST_ARCH_SPARC) && defined(__sparcv9)
+#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(9,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SPARC) && defined(__sparcv8)
+#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(8,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SPARC)
+#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_SPARC
+#   define BOOST_ARCH_SPARC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SPARC_NAME "SPARC"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SPARC,BOOST_ARCH_SPARC_NAME)
diff --git a/include/boost/predef/architecture/superh.h b/include/boost/predef/architecture/superh.h
new file mode 100644
index 0000000..da0529e
--- /dev/null
+++ b/include/boost/predef/architecture/superh.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SUPERH_H
+#define BOOST_PREDEF_ARCHITECTURE_SUPERH_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SH`]
+
+[@http://en.wikipedia.org/wiki/SuperH SuperH] architecture:
+If available versions \[1-5\] are specifically detected.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sh__`] [__predef_detection__]]
+
+    [[`__SH5__`] [5.0.0]]
+    [[`__SH4__`] [4.0.0]]
+    [[`__sh3__`] [3.0.0]]
+    [[`__SH3__`] [3.0.0]]
+    [[`__sh2__`] [2.0.0]]
+    [[`__sh1__`] [1.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_SH BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sh__)
+#   undef BOOST_ARCH_SH
+#   if !defined(BOOST_ARCH_SH) && (defined(__SH5__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(5,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__SH4__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__sh3__) || defined(__SH3__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__sh2__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__sh1__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH)
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_SH
+#   define BOOST_ARCH_SH_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SH_NAME "SuperH"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SH,BOOST_ARCH_SH_NAME)
diff --git a/include/boost/predef/architecture/sys370.h b/include/boost/predef/architecture/sys370.h
new file mode 100644
index 0000000..cfd85dc
--- /dev/null
+++ b/include/boost/predef/architecture/sys370.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SYS370_H
+#define BOOST_PREDEF_ARCHITECTURE_SYS370_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SYS370`]
+
+[@http://en.wikipedia.org/wiki/System/370 System/370] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__370__`] [__predef_detection__]]
+    [[`__THW_370__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__370__) || defined(__THW_370__)
+#   undef BOOST_ARCH_SYS370
+#   define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_SYS370
+#   define BOOST_ARCH_SYS370_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SYS370_NAME "System/370"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS370,BOOST_ARCH_SYS370_NAME)
diff --git a/include/boost/predef/architecture/sys390.h b/include/boost/predef/architecture/sys390.h
new file mode 100644
index 0000000..47aff6a
--- /dev/null
+++ b/include/boost/predef/architecture/sys390.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SYS390_H
+#define BOOST_PREDEF_ARCHITECTURE_SYS390_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SYS390`]
+
+[@http://en.wikipedia.org/wiki/System/390 System/390] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__s390__`] [__predef_detection__]]
+    [[`__s390x__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__s390__) || defined(__s390x__)
+#   undef BOOST_ARCH_SYS390
+#   define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_SYS390
+#   define BOOST_ARCH_SYS390_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SYS390_NAME "System/390"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS390,BOOST_ARCH_SYS390_NAME)
diff --git a/include/boost/predef/architecture/x86.h b/include/boost/predef/architecture/x86.h
new file mode 100644
index 0000000..0ef3ef4
--- /dev/null
+++ b/include/boost/predef/architecture/x86.h
@@ -0,0 +1,38 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#include <boost/predef/architecture/x86/32.h>
+#include <boost/predef/architecture/x86/64.h>
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_X86_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_H
+
+/*`
+[heading `BOOST_ARCH_X86`]
+
+[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture. This is
+a category to indicate that either `BOOST_ARCH_X86_32` or
+`BOOST_ARCH_X86_64` is detected.
+ */
+
+#define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_ARCH_X86_32 || BOOST_ARCH_X86_64
+#   undef BOOST_ARCH_X86
+#   define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_X86
+#   define BOOST_ARCH_X86_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_NAME "Intel x86"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86,BOOST_ARCH_X86_NAME)
diff --git a/include/boost/predef/architecture/x86/32.h b/include/boost/predef/architecture/x86/32.h
new file mode 100644
index 0000000..17fbff5
--- /dev/null
+++ b/include/boost/predef/architecture/x86/32.h
@@ -0,0 +1,87 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_X86_32_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_32_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_X86_32`]
+
+[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture:
+If available versions \[3-6\] are specifically detected.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`i386`] [__predef_detection__]]
+    [[`__i386__`] [__predef_detection__]]
+    [[`__i486__`] [__predef_detection__]]
+    [[`__i586__`] [__predef_detection__]]
+    [[`__i686__`] [__predef_detection__]]
+    [[`__i386`] [__predef_detection__]]
+    [[`_M_IX86`] [__predef_detection__]]
+    [[`_X86_`] [__predef_detection__]]
+    [[`__THW_INTEL__`] [__predef_detection__]]
+    [[`__I86__`] [__predef_detection__]]
+    [[`__INTEL__`] [__predef_detection__]]
+
+    [[`__I86__`] [V.0.0]]
+    [[`_M_IX86`] [V.0.0]]
+    [[`__i686__`] [6.0.0]]
+    [[`__i586__`] [5.0.0]]
+    [[`__i486__`] [4.0.0]]
+    [[`__i386__`] [3.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(i386) || defined(__i386__) || \
+    defined(__i486__) || defined(__i586__) || \
+    defined(__i686__) || defined(__i386) || \
+    defined(_M_IX86) || defined(_X86_) || \
+    defined(__THW_INTEL__) || defined(__I86__) || \
+    defined(__INTEL__)
+#   undef BOOST_ARCH_X86_32
+#   if !defined(BOOST_ARCH_X86_32) && defined(__I86__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(__I86__,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(_M_IX86)
+#       define BOOST_ARCH_X86_32 BOOST_PREDEF_MAKE_10_VV00(_M_IX86)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i686__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(6,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i586__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(5,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i486__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i386__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_X86_32
+#   define BOOST_ARCH_X86_32_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_32_NAME "Intel x86-32"
+
+#include <boost/predef/architecture/x86.h>
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_32,BOOST_ARCH_X86_32_NAME)
diff --git a/include/boost/predef/architecture/x86/64.h b/include/boost/predef/architecture/x86/64.h
new file mode 100644
index 0000000..f761c92
--- /dev/null
+++ b/include/boost/predef/architecture/x86/64.h
@@ -0,0 +1,50 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_X86_64_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_64_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_X86_64`]
+
+[@http://en.wikipedia.org/wiki/Ia64 Intel IA-64] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__x86_64`] [__predef_detection__]]
+    [[`__x86_64__`] [__predef_detection__]]
+    [[`__amd64__`] [__predef_detection__]]
+    [[`__amd64`] [__predef_detection__]]
+    [[`_M_X64`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__x86_64) || defined(__x86_64__) || \
+    defined(__amd64__) || defined(__amd64) || \
+    defined(_M_X64)
+#   undef BOOST_ARCH_X86_64
+#   define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_X86_64
+#   define BOOST_ARCH_X86_64_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_64_NAME "Intel x86-64"
+
+#include <boost/predef/architecture/x86.h>
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_64,BOOST_ARCH_X86_64_NAME)
diff --git a/include/boost/predef/architecture/z.h b/include/boost/predef/architecture/z.h
new file mode 100644
index 0000000..3d218aa
--- /dev/null
+++ b/include/boost/predef/architecture/z.h
@@ -0,0 +1,42 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_Z_H
+#define BOOST_PREDEF_ARCHITECTURE_Z_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_Z`]
+
+[@http://en.wikipedia.org/wiki/Z/Architecture z/Architecture] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SYSC_ZARCH__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_Z BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SYSC_ZARCH__)
+#   undef BOOST_ARCH_Z
+#   define BOOST_ARCH_Z BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_Z
+#   define BOOST_ARCH_Z_AVAILABLE
+#endif
+
+#define BOOST_ARCH_Z_NAME "z/Architecture"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_Z,BOOST_ARCH_Z_NAME)
diff --git a/include/boost/predef/compiler.h b/include/boost/predef/compiler.h
new file mode 100644
index 0000000..de1b4ab
--- /dev/null
+++ b/include/boost/predef/compiler.h
@@ -0,0 +1,44 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#if !defined(BOOST_PREDEF_COMPILER_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_COMPILER_H
+#define BOOST_PREDEF_COMPILER_H
+#endif
+
+#include <boost/predef/compiler/borland.h>
+#include <boost/predef/compiler/clang.h>
+#include <boost/predef/compiler/comeau.h>
+#include <boost/predef/compiler/compaq.h>
+#include <boost/predef/compiler/diab.h>
+#include <boost/predef/compiler/digitalmars.h>
+#include <boost/predef/compiler/dignus.h>
+#include <boost/predef/compiler/edg.h>
+#include <boost/predef/compiler/ekopath.h>
+#include <boost/predef/compiler/gcc_xml.h>
+#include <boost/predef/compiler/gcc.h>
+#include <boost/predef/compiler/greenhills.h>
+#include <boost/predef/compiler/hp_acc.h>
+#include <boost/predef/compiler/iar.h>
+#include <boost/predef/compiler/ibm.h>
+#include <boost/predef/compiler/intel.h>
+#include <boost/predef/compiler/kai.h>
+#include <boost/predef/compiler/llvm.h>
+#include <boost/predef/compiler/metaware.h>
+#include <boost/predef/compiler/metrowerks.h>
+#include <boost/predef/compiler/microtec.h>
+#include <boost/predef/compiler/mpw.h>
+#include <boost/predef/compiler/nvcc.h>
+#include <boost/predef/compiler/palm.h>
+#include <boost/predef/compiler/pgi.h>
+#include <boost/predef/compiler/sgi_mipspro.h>
+#include <boost/predef/compiler/sunpro.h>
+#include <boost/predef/compiler/tendra.h>
+#include <boost/predef/compiler/visualc.h>
+#include <boost/predef/compiler/watcom.h>
+
+#endif
diff --git a/include/boost/predef/compiler/borland.h b/include/boost/predef/compiler/borland.h
new file mode 100644
index 0000000..3677cca
--- /dev/null
+++ b/include/boost/predef/compiler/borland.h
@@ -0,0 +1,63 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_BORLAND_H
+#define BOOST_PREDEF_COMPILER_BORLAND_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_BORLAND`]
+
+[@http://en.wikipedia.org/wiki/C_plus_plus_builder Borland C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__BORLANDC__`] [__predef_detection__]]
+    [[`__CODEGEARC__`] [__predef_detection__]]
+
+    [[`__BORLANDC__`] [V.R.P]]
+    [[`__CODEGEARC__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_BORLAND BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__BORLANDC__) || defined(__CODEGEARC__)
+#   if !defined(BOOST_COMP_BORLAND_DETECTION) && (defined(__CODEGEARC__))
+#       define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__CODEGEARC__)
+#   endif
+#   if !defined(BOOST_COMP_BORLAND_DETECTION)
+#       define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__BORLANDC__)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_BORLAND_DETECTION
+#   define BOOST_COMP_BORLAND_AVAILABLE
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_BORLAND_EMULATED BOOST_COMP_BORLAND_DETECTION
+#   else
+#       undef BOOST_COMP_BORLAND
+#       define BOOST_COMP_BORLAND BOOST_COMP_BORLAND_DETECTION
+#   endif
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_BORLAND_NAME "Borland C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND,BOOST_COMP_BORLAND_NAME)
+
+#ifdef BOOST_COMP_BORLAND_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND_EMULATED,BOOST_COMP_BORLAND_NAME)
+#endif
diff --git a/include/boost/predef/compiler/clang.h b/include/boost/predef/compiler/clang.h
new file mode 100644
index 0000000..56678fe
--- /dev/null
+++ b/include/boost/predef/compiler/clang.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_CLANG_H
+#define BOOST_PREDEF_COMPILER_CLANG_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_CLANG`]
+
+[@http://en.wikipedia.org/wiki/Clang Clang] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__clang__`] [__predef_detection__]]
+
+    [[`__clang_major__`, `__clang_minor__`, `__clang_patchlevel__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_CLANG BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__clang__)
+#   define BOOST_COMP_CLANG_DETECTION BOOST_VERSION_NUMBER(__clang_major__,__clang_minor__,__clang_patchlevel__)
+#endif
+
+#ifdef BOOST_COMP_CLANG_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_CLANG_EMULATED BOOST_COMP_CLANG_DETECTION
+#   else
+#       undef BOOST_COMP_CLANG
+#       define BOOST_COMP_CLANG BOOST_COMP_CLANG_DETECTION
+#   endif
+#   define BOOST_COMP_CLANG_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_CLANG_NAME "Clang"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG,BOOST_COMP_CLANG_NAME)
+
+#ifdef BOOST_COMP_CLANG_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG_EMULATED,BOOST_COMP_CLANG_NAME)
+#endif
diff --git a/include/boost/predef/compiler/comeau.h b/include/boost/predef/compiler/comeau.h
new file mode 100644
index 0000000..15a4564
--- /dev/null
+++ b/include/boost/predef/compiler/comeau.h
@@ -0,0 +1,61 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_COMEAU_H
+#define BOOST_PREDEF_COMPILER_COMEAU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+#define BOOST_COMP_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+/*`
+[heading `BOOST_COMP_COMO`]
+
+[@http://en.wikipedia.org/wiki/Comeau_C/C%2B%2B Comeau C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__COMO__`] [__predef_detection__]]
+
+    [[`__COMO_VERSION__`] [V.R.P]]
+    ]
+ */
+
+#if defined(__COMO__)
+#   if !defined(BOOST_COMP_COMO_DETECTION) && defined(__COMO_VERSION__)
+#       define BOOST_COMP_COMO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__COMO_VERSION__)
+#   endif
+#   if !defined(BOOST_COMP_COMO_DETECTION)
+#       define BOOST_COMP_COMO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_COMO_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_COMO_EMULATED BOOST_COMP_COMO_DETECTION
+#   else
+#       undef BOOST_COMP_COMO
+#       define BOOST_COMP_COMO BOOST_COMP_COMO_DETECTION
+#   endif
+#   define BOOST_COMP_COMO_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_COMO_NAME "Comeau C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO,BOOST_COMP_COMO_NAME)
+
+#ifdef BOOST_COMP_COMO_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO_EMULATED,BOOST_COMP_COMO_NAME)
+#endif
diff --git a/include/boost/predef/compiler/compaq.h b/include/boost/predef/compiler/compaq.h
new file mode 100644
index 0000000..96a79e6
--- /dev/null
+++ b/include/boost/predef/compiler/compaq.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_COMPAQ_H
+#define BOOST_PREDEF_COMPILER_COMPAQ_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DEC`]
+
+[@http://www.openvms.compaq.com/openvms/brochures/deccplus/ Compaq C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DECCXX`] [__predef_detection__]]
+    [[`__DECC`] [__predef_detection__]]
+
+    [[`__DECCXX_VER`] [V.R.P]]
+    [[`__DECC_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_DEC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DECC) || defined(__DECCXX)
+#   if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECCXX_VER)
+#       define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECCXX_VER)
+#   endif
+#   if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECC_VER)
+#       define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECC_VER)
+#   endif
+#   if !defined(BOOST_COMP_DEC_DETECTION)
+#       define BOOST_COM_DEC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_DEC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_DEC_EMULATED BOOST_COMP_DEC_DETECTION
+#   else
+#       undef BOOST_COMP_DEC
+#       define BOOST_COMP_DEC BOOST_COMP_DEC_DETECTION
+#   endif
+#   define BOOST_COMP_DEC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DEC_NAME "Compaq C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC,BOOST_COMP_DEC_NAME)
+
+#ifdef BOOST_COMP_DEC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC_EMULATED,BOOST_COMP_DEC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/diab.h b/include/boost/predef/compiler/diab.h
new file mode 100644
index 0000000..f5a37de
--- /dev/null
+++ b/include/boost/predef/compiler/diab.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_DIAB_H
+#define BOOST_PREDEF_COMPILER_DIAB_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DIAB`]
+
+[@http://www.windriver.com/products/development_suite/wind_river_compiler/ Diab C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DCC__`] [__predef_detection__]]
+
+    [[`__VERSION_NUMBER__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_DIAB BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DCC__)
+#   define BOOST_COMP_DIAB_DETECTION BOOST_PREDEF_MAKE_10_VRPP(__VERSION_NUMBER__)
+#endif
+
+#ifdef BOOST_COMP_DIAB_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_DIAB_EMULATED BOOST_COMP_DIAB_DETECTION
+#   else
+#       undef BOOST_COMP_DIAB
+#       define BOOST_COMP_DIAB BOOST_COMP_DIAB_DETECTION
+#   endif
+#   define BOOST_COMP_DIAB_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DIAB_NAME "Diab C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB,BOOST_COMP_DIAB_NAME)
+
+#ifdef BOOST_COMP_DIAB_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB_EMULATED,BOOST_COMP_DIAB_NAME)
+#endif
diff --git a/include/boost/predef/compiler/digitalmars.h b/include/boost/predef/compiler/digitalmars.h
new file mode 100644
index 0000000..9bd5850
--- /dev/null
+++ b/include/boost/predef/compiler/digitalmars.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_DIGITALMARS_H
+#define BOOST_PREDEF_COMPILER_DIGITALMARS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DMC`]
+
+[@http://en.wikipedia.org/wiki/Digital_Mars Digital Mars] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DMC__`] [__predef_detection__]]
+
+    [[`__DMC__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_DMC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DMC__)
+#   define BOOST_COMP_DMC_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__DMC__)
+#endif
+
+#ifdef BOOST_COMP_DMC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_DMC_EMULATED BOOST_COMP_DMC_DETECTION
+#   else
+#       undef BOOST_COMP_DMC
+#       define BOOST_COMP_DMC BOOST_COMP_DMC_DETECTION
+#   endif
+#   define BOOST_COMP_DMC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DMC_NAME "Digital Mars"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC,BOOST_COMP_DMC_NAME)
+
+#ifdef BOOST_COMP_DMC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC_EMULATED,BOOST_COMP_DMC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/dignus.h b/include/boost/predef/compiler/dignus.h
new file mode 100644
index 0000000..c65d3dc
--- /dev/null
+++ b/include/boost/predef/compiler/dignus.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_DIGNUS_H
+#define BOOST_PREDEF_COMPILER_DIGNUS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SYSC`]
+
+[@http://www.dignus.com/dcxx/ Dignus Systems/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SYSC__`] [__predef_detection__]]
+
+    [[`__SYSC_VER__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_SYSC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SYSC__)
+#   define BOOST_COMP_SYSC_DETECTION BOOST_PREDEF_MAKE_10_VRRPP(__SYSC_VER__)
+#endif
+
+#ifdef BOOST_COMP_SYSC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_SYSC_EMULATED BOOST_COMP_SYSC_DETECTION
+#   else
+#       undef BOOST_COMP_SYSC
+#       define BOOST_COMP_SYSC BOOST_COMP_SYSC_DETECTION
+#   endif
+#   define BOOST_COMP_SYSC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SYSC_NAME "Dignus Systems/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC,BOOST_COMP_SYSC_NAME)
+
+#ifdef BOOST_COMP_SYSC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC_EMULATED,BOOST_COMP_SYSC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/edg.h b/include/boost/predef/compiler/edg.h
new file mode 100644
index 0000000..2ffb9b0
--- /dev/null
+++ b/include/boost/predef/compiler/edg.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_EDG_H
+#define BOOST_PREDEF_COMPILER_EDG_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_EDG`]
+
+[@http://en.wikipedia.org/wiki/Edison_Design_Group EDG C++ Frontend] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__EDG__`] [__predef_detection__]]
+
+    [[`__EDG_VERSION__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_EDG BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__EDG__)
+#   define BOOST_COMP_EDG_DETECTION BOOST_PREDEF_MAKE_10_VRR(__EDG_VERSION__)
+#endif
+
+#ifdef BOOST_COMP_EDG_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_EDG_EMULATED BOOST_COMP_EDG_DETECTION
+#   else
+#       undef BOOST_COMP_EDG
+#       define BOOST_COMP_EDG BOOST_COMP_EDG_DETECTION
+#   endif
+#   define BOOST_COMP_EDG_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_EDG_NAME "EDG C++ Frontend"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG,BOOST_COMP_EDG_NAME)
+
+#ifdef BOOST_COMP_EDG_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG_EMULATED,BOOST_COMP_EDG_NAME)
+#endif
diff --git a/include/boost/predef/compiler/ekopath.h b/include/boost/predef/compiler/ekopath.h
new file mode 100644
index 0000000..e5cde36
--- /dev/null
+++ b/include/boost/predef/compiler/ekopath.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_EKOPATH_H
+#define BOOST_PREDEF_COMPILER_EKOPATH_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PATH`]
+
+[@http://en.wikipedia.org/wiki/PathScale EKOpath] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__PATHCC__`] [__predef_detection__]]
+
+    [[`__PATHCC__`, `__PATHCC_MINOR__`, `__PATHCC_PATCHLEVEL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_PATH BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__PATHCC__)
+#   define BOOST_COMP_PATH_DETECTION \
+        BOOST_VERSION_NUMBER(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__)
+#endif
+
+#ifdef BOOST_COMP_PATH_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_PATH_EMULATED BOOST_COMP_PATH_DETECTION
+#   else
+#       undef BOOST_COMP_PATH
+#       define BOOST_COMP_PATH BOOST_COMP_PATH_DETECTION
+#   endif
+#   define BOOST_COMP_PATH_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PATH_NAME "EKOpath"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH,BOOST_COMP_PATH_NAME)
+
+#ifdef BOOST_COMP_PATH_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH_EMULATED,BOOST_COMP_PATH_NAME)
+#endif
diff --git a/include/boost/predef/compiler/gcc.h b/include/boost/predef/compiler/gcc.h
new file mode 100644
index 0000000..c2d7fff
--- /dev/null
+++ b/include/boost/predef/compiler/gcc.h
@@ -0,0 +1,68 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_GCC_H
+#define BOOST_PREDEF_COMPILER_GCC_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GNUC`]
+
+[@http://en.wikipedia.org/wiki/GNU_Compiler_Collection Gnu GCC C/C++] compiler.
+Version number available as major, minor, and patch (if available).
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GNUC__`] [__predef_detection__]]
+
+    [[`__GNUC__`, `__GNUC_MINOR__`, `__GNUC_PATCHLEVEL__`] [V.R.P]]
+    [[`__GNUC__`, `__GNUC_MINOR__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_GNUC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GNUC__)
+#   if !defined(BOOST_COMP_GNUC_DETECTION) && defined(__GNUC_PATCHLEVEL__)
+#       define BOOST_COMP_GNUC_DETECTION \
+            BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__)
+#   endif
+#   if !defined(BOOST_COMP_GNUC_DETECTION)
+#       define BOOST_COMP_GNUC_DETECTION \
+            BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,0)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_GNUC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_GNUC_EMULATED BOOST_COMP_GNUC_DETECTION
+#   else
+#       undef BOOST_COMP_GNUC
+#       define BOOST_COMP_GNUC BOOST_COMP_GNUC_DETECTION
+#   endif
+#   define BOOST_COMP_GNUC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GNUC_NAME "Gnu GCC C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC,BOOST_COMP_GNUC_NAME)
+
+#ifdef BOOST_COMP_GNUC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC_EMULATED,BOOST_COMP_GNUC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/gcc_xml.h b/include/boost/predef/compiler/gcc_xml.h
new file mode 100644
index 0000000..acae600
--- /dev/null
+++ b/include/boost/predef/compiler/gcc_xml.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_GCC_XML_H
+#define BOOST_PREDEF_COMPILER_GCC_XML_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GCCXML`]
+
+[@http://www.gccxml.org/ GCC XML] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GCCXML__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_GCCXML BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GCCXML__)
+#   define BOOST_COMP_GCCXML_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_GCCXML_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_GCCXML_EMULATED BOOST_COMP_GCCXML_DETECTION
+#   else
+#       undef BOOST_COMP_GCCXML
+#       define BOOST_COMP_GCCXML BOOST_COMP_GCCXML_DETECTION
+#   endif
+#   define BOOST_COMP_GCCXML_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GCCXML_NAME "GCC XML"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML,BOOST_COMP_GCCXML_NAME)
+
+#ifdef BOOST_COMP_GCCXML_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML_EMULATED,BOOST_COMP_GCCXML_NAME)
+#endif
diff --git a/include/boost/predef/compiler/greenhills.h b/include/boost/predef/compiler/greenhills.h
new file mode 100644
index 0000000..23b8f01
--- /dev/null
+++ b/include/boost/predef/compiler/greenhills.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_GREENHILLS_H
+#define BOOST_PREDEF_COMPILER_GREENHILLS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GHS`]
+
+[@http://en.wikipedia.org/wiki/Green_Hills_Software Green Hills C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__ghs`] [__predef_detection__]]
+    [[`__ghs__`] [__predef_detection__]]
+
+    [[`__GHS_VERSION_NUMBER__`] [V.R.P]]
+    [[`__ghs`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_GHS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__ghs) || defined(__ghs__)
+#   if !defined(BOOST_COMP_GHS_DETECTION) && defined(__GHS_VERSION_NUMBER__)
+#       define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__GHS_VERSION_NUMBER__)
+#   endif
+#   if !defined(BOOST_COMP_GHS_DETECTION) && defined(__ghs)
+#       define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__ghs)
+#   endif
+#   if !defined(BOOST_COMP_GHS_DETECTION)
+#       define BOOST_COMP_GHS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_GHS_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_GHS_EMULATED BOOST_COMP_GHS_DETECTION
+#   else
+#       undef BOOST_COMP_GHS
+#       define BOOST_COMP_GHS BOOST_COMP_GHS_DETECTION
+#   endif
+#   define BOOST_COMP_GHS_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GHS_NAME "Green Hills C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS,BOOST_COMP_GHS_NAME)
+
+#ifdef BOOST_COMP_GHS_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS_EMULATED,BOOST_COMP_GHS_NAME)
+#endif
diff --git a/include/boost/predef/compiler/hp_acc.h b/include/boost/predef/compiler/hp_acc.h
new file mode 100644
index 0000000..7b3ffe9
--- /dev/null
+++ b/include/boost/predef/compiler/hp_acc.h
@@ -0,0 +1,61 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_HP_ACC_H
+#define BOOST_PREDEF_COMPILER_HP_ACC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_HPACC`]
+
+HP aC++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__HP_aCC`] [__predef_detection__]]
+
+    [[`__HP_aCC`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_HPACC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__HP_aCC)
+#   if !defined(BOOST_COMP_HPACC_DETECTION) && (__HP_aCC > 1)
+#       define BOOST_COMP_HPACC_DETECTION BOOST_PREDEF_MAKE_10_VVRRPP(__HP_aCC)
+#   endif
+#   if !defined(BOOST_COMP_HPACC_DETECTION)
+#       define BOOST_COMP_HPACC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_HPACC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_HPACC_EMULATED BOOST_COMP_HPACC_DETECTION
+#   else
+#       undef BOOST_COMP_HPACC
+#       define BOOST_COMP_HPACC BOOST_COMP_HPACC_DETECTION
+#   endif
+#   define BOOST_COMP_HPACC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_HPACC_NAME "HP aC++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC,BOOST_COMP_HPACC_NAME)
+
+#ifdef BOOST_COMP_HPACC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC_EMULATED,BOOST_COMP_HPACC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/iar.h b/include/boost/predef/compiler/iar.h
new file mode 100644
index 0000000..237f492
--- /dev/null
+++ b/include/boost/predef/compiler/iar.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_IAR_H
+#define BOOST_PREDEF_COMPILER_IAR_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_IAR`]
+
+IAR C/C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__IAR_SYSTEMS_ICC__`] [__predef_detection__]]
+
+    [[`__VER__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_IAR BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IAR_SYSTEMS_ICC__)
+#   define BOOST_COMP_IAR_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__VER__)
+#endif
+
+#ifdef BOOST_COMP_IAR_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_IAR_EMULATED BOOST_COMP_IAR_DETECTION
+#   else
+#       undef BOOST_COMP_IAR
+#       define BOOST_COMP_IAR BOOST_COMP_IAR_DETECTION
+#   endif
+#   define BOOST_COMP_IAR_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_IAR_NAME "IAR C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR,BOOST_COMP_IAR_NAME)
+
+#ifdef BOOST_COMP_IAR_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR_EMULATED,BOOST_COMP_IAR_NAME)
+#endif
diff --git a/include/boost/predef/compiler/ibm.h b/include/boost/predef/compiler/ibm.h
new file mode 100644
index 0000000..6931ebd
--- /dev/null
+++ b/include/boost/predef/compiler/ibm.h
@@ -0,0 +1,72 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_IBM_H
+#define BOOST_PREDEF_COMPILER_IBM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_IBM`]
+
+[@http://en.wikipedia.org/wiki/VisualAge IBM XL C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__IBMCPP__`] [__predef_detection__]]
+    [[`__xlC__`] [__predef_detection__]]
+    [[`__xlc__`] [__predef_detection__]]
+
+    [[`__COMPILER_VER__`] [V.R.P]]
+    [[`__xlC__`] [V.R.P]]
+    [[`__xlc__`] [V.R.P]]
+    [[`__IBMCPP__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IBMCPP__) || defined(__xlC__) || defined(__xlc__)
+#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__COMPILER_VER__)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPPPP(__COMPILER_VER__)
+#   endif
+#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlC__)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlC__)
+#   endif
+#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlc__)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlc__)
+#   endif
+#   if !defined(BOOST_COMP_IBM_DETECTION)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_10_VRP(__IBMCPP__)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_IBM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_IBM_EMULATED BOOST_COMP_IBM_DETECTION
+#   else
+#       undef BOOST_COMP_IBM
+#       define BOOST_COMP_IBM BOOST_COMP_IBM_DETECTION
+#   endif
+#   define BOOST_COMP_IBM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_IBM_NAME "IBM XL C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM,BOOST_COMP_IBM_NAME)
+
+#ifdef BOOST_COMP_IBM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM_EMULATED,BOOST_COMP_IBM_NAME)
+#endif
diff --git a/include/boost/predef/compiler/intel.h b/include/boost/predef/compiler/intel.h
new file mode 100644
index 0000000..f8a17ef
--- /dev/null
+++ b/include/boost/predef/compiler/intel.h
@@ -0,0 +1,79 @@
+/*
+Copyright Rene Rivera 2008-2017
+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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_INTEL_H
+#define BOOST_PREDEF_COMPILER_INTEL_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_INTEL`]
+
+[@http://en.wikipedia.org/wiki/Intel_C%2B%2B Intel C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__INTEL_COMPILER`] [__predef_detection__]]
+    [[`__ICL`] [__predef_detection__]]
+    [[`__ICC`] [__predef_detection__]]
+    [[`__ECC`] [__predef_detection__]]
+
+    [[`__INTEL_COMPILER`] [V.R]]
+    [[`__INTEL_COMPILER` and `__INTEL_COMPILER_UPDATE`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_INTEL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \
+    defined(__ECC)
+/*`
+[note Because of an Intel mistake in the release version numbering when
+`__INTEL_COMPILER` is `9999` it is detected as version 12.1.0.]
+ */
+#   if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 9999)
+#       define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER(12,1,0)
+#   endif
+#   if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
+#       define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER( \
+            BOOST_VERSION_NUMBER_MAJOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \
+            BOOST_VERSION_NUMBER_MINOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \
+            __INTEL_COMPILER_UPDATE)
+#   endif
+#   if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER)
+#       define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)
+#   endif
+#   if !defined(BOOST_COMP_INTEL_DETECTION)
+#       define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_INTEL_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_INTEL_EMULATED BOOST_COMP_INTEL_DETECTION
+#   else
+#       undef BOOST_COMP_INTEL
+#       define BOOST_COMP_INTEL BOOST_COMP_INTEL_DETECTION
+#   endif
+#   define BOOST_COMP_INTEL_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_INTEL_NAME "Intel C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL,BOOST_COMP_INTEL_NAME)
+
+#ifdef BOOST_COMP_INTEL_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL_EMULATED,BOOST_COMP_INTEL_NAME)
+#endif
diff --git a/include/boost/predef/compiler/kai.h b/include/boost/predef/compiler/kai.h
new file mode 100644
index 0000000..68ce84e
--- /dev/null
+++ b/include/boost/predef/compiler/kai.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_KAI_H
+#define BOOST_PREDEF_COMPILER_KAI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_KCC`]
+
+Kai C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__KCC`] [__predef_detection__]]
+
+    [[`__KCC_VERSION`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_KCC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__KCC)
+#   define BOOST_COMP_KCC_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__KCC_VERSION)
+#endif
+
+#ifdef BOOST_COMP_KCC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_KCC_EMULATED BOOST_COMP_KCC_DETECTION
+#   else
+#       undef BOOST_COMP_KCC
+#       define BOOST_COMP_KCC BOOST_COMP_KCC_DETECTION
+#   endif
+#   define BOOST_COMP_KCC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_KCC_NAME "Kai C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC,BOOST_COMP_KCC_NAME)
+
+#ifdef BOOST_COMP_KCC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC_EMULATED,BOOST_COMP_KCC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/llvm.h b/include/boost/predef/compiler/llvm.h
new file mode 100644
index 0000000..de654eb
--- /dev/null
+++ b/include/boost/predef/compiler/llvm.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_LLVM_H
+#define BOOST_PREDEF_COMPILER_LLVM_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_LLVM`]
+
+[@http://en.wikipedia.org/wiki/LLVM LLVM] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__llvm__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_LLVM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__llvm__)
+#   define BOOST_COMP_LLVM_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_LLVM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_LLVM_EMULATED BOOST_COMP_LLVM_DETECTION
+#   else
+#       undef BOOST_COMP_LLVM
+#       define BOOST_COMP_LLVM BOOST_COMP_LLVM_DETECTION
+#   endif
+#   define BOOST_COMP_LLVM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_LLVM_NAME "LLVM"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM,BOOST_COMP_LLVM_NAME)
+
+#ifdef BOOST_COMP_LLVM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM_EMULATED,BOOST_COMP_LLVM_NAME)
+#endif
diff --git a/include/boost/predef/compiler/metaware.h b/include/boost/predef/compiler/metaware.h
new file mode 100644
index 0000000..1a32039
--- /dev/null
+++ b/include/boost/predef/compiler/metaware.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_METAWARE_H
+#define BOOST_PREDEF_COMPILER_METAWARE_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_HIGHC`]
+
+MetaWare High C/C++ compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__HIGHC__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_HIGHC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__HIGHC__)
+#   define BOOST_COMP_HIGHC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_HIGHC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_HIGHC_EMULATED BOOST_COMP_HIGHC_DETECTION
+#   else
+#       undef BOOST_COMP_HIGHC
+#       define BOOST_COMP_HIGHC BOOST_COMP_HIGHC_DETECTION
+#   endif
+#   define BOOST_COMP_HIGHC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_HIGHC_NAME "MetaWare High C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC,BOOST_COMP_HIGHC_NAME)
+
+#ifdef BOOST_COMP_HIGHC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC_EMULATED,BOOST_COMP_HIGHC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/metrowerks.h b/include/boost/predef/compiler/metrowerks.h
new file mode 100644
index 0000000..f2d739b
--- /dev/null
+++ b/include/boost/predef/compiler/metrowerks.h
@@ -0,0 +1,77 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_METROWERKS_H
+#define BOOST_PREDEF_COMPILER_METROWERKS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MWERKS`]
+
+[@http://en.wikipedia.org/wiki/CodeWarrior Metrowerks CodeWarrior] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MWERKS__`] [__predef_detection__]]
+    [[`__CWCC__`] [__predef_detection__]]
+
+    [[`__CWCC__`] [V.R.P]]
+    [[`__MWERKS__`] [V.R.P >= 4.2.0]]
+    [[`__MWERKS__`] [9.R.0]]
+    [[`__MWERKS__`] [8.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_MWERKS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MWERKS__) || defined(__CWCC__)
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && defined(__CWCC__)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__CWCC__)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x4200)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__MWERKS__)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3204) // note the "skip": 04->9.3
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100-1,0)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3200)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100,0)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3000)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(8,(__MWERKS__)%100,0)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_MWERKS_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MWERKS_EMULATED BOOST_COMP_MWERKS_DETECTION
+#   else
+#       undef BOOST_COMP_MWERKS
+#       define BOOST_COMP_MWERKS BOOST_COMP_MWERKS_DETECTION
+#   endif
+#   define BOOST_COMP_MWERKS_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MWERKS_NAME "Metrowerks CodeWarrior"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS,BOOST_COMP_MWERKS_NAME)
+
+#ifdef BOOST_COMP_MWERKS_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS_EMULATED,BOOST_COMP_MWERKS_NAME)
+#endif
diff --git a/include/boost/predef/compiler/microtec.h b/include/boost/predef/compiler/microtec.h
new file mode 100644
index 0000000..066a6d2
--- /dev/null
+++ b/include/boost/predef/compiler/microtec.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_MICROTEC_H
+#define BOOST_PREDEF_COMPILER_MICROTEC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MRI`]
+
+[@http://www.mentor.com/microtec/ Microtec C/C++] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_MRI`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_MRI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_MRI)
+#   define BOOST_COMP_MRI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_MRI_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MRI_EMULATED BOOST_COMP_MRI_DETECTION
+#   else
+#       undef BOOST_COMP_MRI
+#       define BOOST_COMP_MRI BOOST_COMP_MRI_DETECTION
+#   endif
+#   define BOOST_COMP_MRI_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MRI_NAME "Microtec C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI,BOOST_COMP_MRI_NAME)
+
+#ifdef BOOST_COMP_MRI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI_EMULATED,BOOST_COMP_MRI_NAME)
+#endif
diff --git a/include/boost/predef/compiler/mpw.h b/include/boost/predef/compiler/mpw.h
new file mode 100644
index 0000000..1183306
--- /dev/null
+++ b/include/boost/predef/compiler/mpw.h
@@ -0,0 +1,63 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_MPW_H
+#define BOOST_PREDEF_COMPILER_MPW_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MPW`]
+
+[@http://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop MPW C++] compiler.
+Version number available as major, and minor.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MRC__`] [__predef_detection__]]
+    [[`MPW_C`] [__predef_detection__]]
+    [[`MPW_CPLUS`] [__predef_detection__]]
+
+    [[`__MRC__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_MPW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MRC__) || defined(MPW_C) || defined(MPW_CPLUS)
+#   if !defined(BOOST_COMP_MPW_DETECTION) && defined(__MRC__)
+#       define BOOST_COMP_MPW_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__MRC__)
+#   endif
+#   if !defined(BOOST_COMP_MPW_DETECTION)
+#       define BOOST_COMP_MPW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_MPW_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MPW_EMULATED BOOST_COMP_MPW_DETECTION
+#   else
+#       undef BOOST_COMP_MPW
+#       define BOOST_COMP_MPW BOOST_COMP_MPW_DETECTION
+#   endif
+#   define BOOST_COMP_MPW_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MPW_NAME "MPW C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW,BOOST_COMP_MPW_NAME)
+
+#ifdef BOOST_COMP_MPW_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW_EMULATED,BOOST_COMP_MPW_NAME)
+#endif
diff --git a/include/boost/predef/compiler/nvcc.h b/include/boost/predef/compiler/nvcc.h
new file mode 100644
index 0000000..3c35ef7
--- /dev/null
+++ b/include/boost/predef/compiler/nvcc.h
@@ -0,0 +1,60 @@
+/*
+Copyright Benjamin Worpitz 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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_NVCC_H
+#define BOOST_PREDEF_COMPILER_NVCC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_NVCC`]
+
+[@https://en.wikipedia.org/wiki/NVIDIA_CUDA_Compiler NVCC] compiler.
+Version number available as major, minor, and patch beginning with version 7.5.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__NVCC__`] [__predef_detection__]]
+
+    [[`__CUDACC_VER_MAJOR__`, `__CUDACC_VER_MINOR__`, `__CUDACC_VER_BUILD__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_NVCC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__NVCC__)
+#   if !defined(__CUDACC_VER_MAJOR__) || !defined(__CUDACC_VER_MINOR__) || !defined(__CUDACC_VER_BUILD__)
+#       define BOOST_COMP_NVCC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   else
+#       define BOOST_COMP_NVCC_DETECTION BOOST_VERSION_NUMBER(__CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, __CUDACC_VER_BUILD__)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_NVCC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_NVCC_EMULATED BOOST_COMP_NVCC_DETECTION
+#   else
+#       undef BOOST_COMP_NVCC
+#       define BOOST_COMP_NVCC BOOST_COMP_NVCC_DETECTION
+#   endif
+#   define BOOST_COMP_NVCC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_NVCC_NAME "NVCC"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_NVCC,BOOST_COMP_NVCC_NAME)
+
+#ifdef BOOST_COMP_NVCC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_NVCC_EMULATED,BOOST_COMP_NVCC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/palm.h b/include/boost/predef/compiler/palm.h
new file mode 100644
index 0000000..707925a
--- /dev/null
+++ b/include/boost/predef/compiler/palm.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_PALM_H
+#define BOOST_PREDEF_COMPILER_PALM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PALM`]
+
+Palm C/C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_PACC_VER`] [__predef_detection__]]
+
+    [[`_PACC_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_PALM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_PACC_VER)
+#   define BOOST_COMP_PALM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPP000(_PACC_VER)
+#endif
+
+#ifdef BOOST_COMP_PALM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_PALM_EMULATED BOOST_COMP_PALM_DETECTION
+#   else
+#       undef BOOST_COMP_PALM
+#       define BOOST_COMP_PALM BOOST_COMP_PALM_DETECTION
+#   endif
+#   define BOOST_COMP_PALM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PALM_NAME "Palm C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM,BOOST_COMP_PALM_NAME)
+
+#ifdef BOOST_COMP_PALM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM_EMULATED,BOOST_COMP_PALM_NAME)
+#endif
diff --git a/include/boost/predef/compiler/pgi.h b/include/boost/predef/compiler/pgi.h
new file mode 100644
index 0000000..e016aeb
--- /dev/null
+++ b/include/boost/predef/compiler/pgi.h
@@ -0,0 +1,60 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_PGI_H
+#define BOOST_PREDEF_COMPILER_PGI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PGI`]
+
+[@http://en.wikipedia.org/wiki/The_Portland_Group Portland Group C/C++] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__PGI`] [__predef_detection__]]
+
+    [[`__PGIC__`, `__PGIC_MINOR__`, `__PGIC_PATCHLEVEL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_PGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__PGI)
+#   if !defined(BOOST_COMP_PGI_DETECTION) && (defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__))
+#       define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER(__PGIC__,__PGIC_MINOR__,__PGIC_PATCHLEVEL__)
+#   endif
+#   if !defined(BOOST_COMP_PGI_DETECTION)
+#       define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_PGI_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_PGI_EMULATED BOOST_COMP_PGI_DETECTION
+#   else
+#       undef BOOST_COMP_PGI
+#       define BOOST_COMP_PGI BOOST_COMP_PGI_DETECTION
+#   endif
+#   define BOOST_COMP_PGI_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PGI_NAME "Portland Group C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI,BOOST_COMP_PGI_NAME)
+
+#ifdef BOOST_COMP_PGI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI_EMULATED,BOOST_COMP_PGI_NAME)
+#endif
diff --git a/include/boost/predef/compiler/sgi_mipspro.h b/include/boost/predef/compiler/sgi_mipspro.h
new file mode 100644
index 0000000..00739f0
--- /dev/null
+++ b/include/boost/predef/compiler/sgi_mipspro.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_SGI_MIPSPRO_H
+#define BOOST_PREDEF_COMPILER_SGI_MIPSPRO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SGI`]
+
+[@http://en.wikipedia.org/wiki/MIPSpro SGI MIPSpro] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sgi`] [__predef_detection__]]
+    [[`sgi`] [__predef_detection__]]
+
+    [[`_SGI_COMPILER_VERSION`] [V.R.P]]
+    [[`_COMPILER_VERSION`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sgi) || defined(sgi)
+#   if !defined(BOOST_COMP_SGI_DETECTION) && defined(_SGI_COMPILER_VERSION)
+#       define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_SGI_COMPILER_VERSION)
+#   endif
+#   if !defined(BOOST_COMP_SGI_DETECTION) && defined(_COMPILER_VERSION)
+#       define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_COMPILER_VERSION)
+#   endif
+#   if !defined(BOOST_COMP_SGI_DETECTION)
+#       define BOOST_COMP_SGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_SGI_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_SGI_EMULATED BOOST_COMP_SGI_DETECTION
+#   else
+#       undef BOOST_COMP_SGI
+#       define BOOST_COMP_SGI BOOST_COMP_SGI_DETECTION
+#   endif
+#   define BOOST_COMP_SGI_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SGI_NAME "SGI MIPSpro"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI,BOOST_COMP_SGI_NAME)
+
+#ifdef BOOST_COMP_SGI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI_EMULATED,BOOST_COMP_SGI_NAME)
+#endif
diff --git a/include/boost/predef/compiler/sunpro.h b/include/boost/predef/compiler/sunpro.h
new file mode 100644
index 0000000..92c3926
--- /dev/null
+++ b/include/boost/predef/compiler/sunpro.h
@@ -0,0 +1,76 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_SUNPRO_H
+#define BOOST_PREDEF_COMPILER_SUNPRO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SUNPRO`]
+
+[@http://en.wikipedia.org/wiki/Oracle_Solaris_Studio Oracle Solaris Studio] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SUNPRO_CC`] [__predef_detection__]]
+    [[`__SUNPRO_C`] [__predef_detection__]]
+
+    [[`__SUNPRO_CC`] [V.R.P]]
+    [[`__SUNPRO_C`] [V.R.P]]
+    [[`__SUNPRO_CC`] [VV.RR.P]]
+    [[`__SUNPRO_C`] [VV.RR.P]]
+    ]
+ */
+
+#define BOOST_COMP_SUNPRO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SUNPRO_CC) || defined(__SUNPRO_C)
+#   if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_CC)
+#       if (__SUNPRO_CC < 0x5100)
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_CC)
+#       else
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VVRRP(__SUNPRO_CC)
+#       endif
+#   endif
+#   if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_C)
+#       if (__SUNPRO_C < 0x5100)
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_C)
+#       else
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VVRRP(__SUNPRO_C)
+#       endif
+#   endif
+#   if !defined(BOOST_COMP_SUNPRO_DETECTION)
+#       define BOOST_COMP_SUNPRO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_SUNPRO_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_SUNPRO_EMULATED BOOST_COMP_SUNPRO_DETECTION
+#   else
+#       undef BOOST_COMP_SUNPRO
+#       define BOOST_COMP_SUNPRO BOOST_COMP_SUNPRO_DETECTION
+#   endif
+#   define BOOST_COMP_SUNPRO_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SUNPRO_NAME "Oracle Solaris Studio"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO,BOOST_COMP_SUNPRO_NAME)
+
+#ifdef BOOST_COMP_SUNPRO_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO_EMULATED,BOOST_COMP_SUNPRO_NAME)
+#endif
diff --git a/include/boost/predef/compiler/tendra.h b/include/boost/predef/compiler/tendra.h
new file mode 100644
index 0000000..c2bc5e4
--- /dev/null
+++ b/include/boost/predef/compiler/tendra.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_TENDRA_H
+#define BOOST_PREDEF_COMPILER_TENDRA_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_TENDRA`]
+
+[@http://en.wikipedia.org/wiki/TenDRA_Compiler TenDRA C/C++] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__TenDRA__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_TENDRA BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__TenDRA__)
+#   define BOOST_COMP_TENDRA_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_TENDRA_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_TENDRA_EMULATED BOOST_COMP_TENDRA_DETECTION
+#   else
+#       undef BOOST_COMP_TENDRA
+#       define BOOST_COMP_TENDRA BOOST_COMP_TENDRA_DETECTION
+#   endif
+#   define BOOST_COMP_TENDRA_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_TENDRA_NAME "TenDRA C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA,BOOST_COMP_TENDRA_NAME)
+
+#ifdef BOOST_COMP_TENDRA_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA_EMULATED,BOOST_COMP_TENDRA_NAME)
+#endif
diff --git a/include/boost/predef/compiler/visualc.h b/include/boost/predef/compiler/visualc.h
new file mode 100644
index 0000000..f81e61e
--- /dev/null
+++ b/include/boost/predef/compiler/visualc.h
@@ -0,0 +1,105 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_VISUALC_H
+#define BOOST_PREDEF_COMPILER_VISUALC_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MSVC`]
+
+[@http://en.wikipedia.org/wiki/Visual_studio Microsoft Visual C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_MSC_VER`] [__predef_detection__]]
+
+    [[`_MSC_FULL_VER`] [V.R.P]]
+    [[`_MSC_VER`] [V.R.0]]
+    ]
+
+[note Release of Visual Studio after 2015 will no longer be identified
+by Boost Predef as the marketing version number. Instead we use the
+compiler version number directly, i.e. the _MSC_VER number.]
+ */
+
+#define BOOST_COMP_MSVC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_MSC_VER)
+#   if !defined (_MSC_FULL_VER)
+#       define BOOST_COMP_MSVC_BUILD 0
+#   else
+        /* how many digits does the build number have? */
+#       if _MSC_FULL_VER / 10000 == _MSC_VER
+            /* four digits */
+#           define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 10000)
+#       elif _MSC_FULL_VER / 100000 == _MSC_VER
+            /* five digits */
+#           define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 100000)
+#       else
+#           error "Cannot determine build number from _MSC_FULL_VER"
+#       endif
+#   endif
+    /*
+    VS2014 was skipped in the release sequence for MS. Which
+    means that the compiler and VS product versions are no longer
+    in sync. Hence we need to use different formulas for
+    mapping from MSC version to VS product version.
+
+    VS2017 is a total nightmare when it comes to version numbers.
+    Hence to avoid arguments relating to that both present and
+    future.. Any version after VS2015 will use solely the compiler
+    version, i.e. cl.exe, as the version number here.
+    */
+#   if (_MSC_VER > 1900)
+#       define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
+            _MSC_VER/100,\
+            _MSC_VER%100,\
+            BOOST_COMP_MSVC_BUILD)
+#   elif (_MSC_VER >= 1900)
+#       define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
+            _MSC_VER/100-5,\
+            _MSC_VER%100,\
+            BOOST_COMP_MSVC_BUILD)
+#   else
+#       define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
+            _MSC_VER/100-6,\
+            _MSC_VER%100,\
+            BOOST_COMP_MSVC_BUILD)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_MSVC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MSVC_EMULATED BOOST_COMP_MSVC_DETECTION
+#   else
+#       undef BOOST_COMP_MSVC
+#       define BOOST_COMP_MSVC BOOST_COMP_MSVC_DETECTION
+#   endif
+#   define BOOST_COMP_MSVC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MSVC_NAME "Microsoft Visual C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC,BOOST_COMP_MSVC_NAME)
+
+#ifdef BOOST_COMP_MSVC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC_EMULATED,BOOST_COMP_MSVC_NAME)
+#endif
diff --git a/include/boost/predef/compiler/watcom.h b/include/boost/predef/compiler/watcom.h
new file mode 100644
index 0000000..b0e7776
--- /dev/null
+++ b/include/boost/predef/compiler/watcom.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_WATCOM_H
+#define BOOST_PREDEF_COMPILER_WATCOM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_WATCOM`]
+
+[@http://en.wikipedia.org/wiki/Watcom Watcom C++] compiler.
+Version number available as major, and minor.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__WATCOMC__`] [__predef_detection__]]
+
+    [[`__WATCOMC__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_WATCOM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__WATCOMC__)
+#   define BOOST_COMP_WATCOM_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__WATCOMC__)
+#endif
+
+#ifdef BOOST_COMP_WATCOM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_WATCOM_EMULATED BOOST_COMP_WATCOM_DETECTION
+#   else
+#       undef BOOST_COMP_WATCOM
+#       define BOOST_COMP_WATCOM BOOST_COMP_WATCOM_DETECTION
+#   endif
+#   define BOOST_COMP_WATCOM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_WATCOM_NAME "Watcom C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM,BOOST_COMP_WATCOM_NAME)
+
+#ifdef BOOST_COMP_WATCOM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM_EMULATED,BOOST_COMP_WATCOM_NAME)
+#endif
diff --git a/include/boost/predef/detail/_cassert.h b/include/boost/predef/detail/_cassert.h
new file mode 100644
index 0000000..940e944
--- /dev/null
+++ b/include/boost/predef/detail/_cassert.h
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 2011-2012
+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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL__CASSERT_H
+#define BOOST_PREDEF_DETAIL__CASSERT_H
+
+#if defined(__cplusplus)
+#include <cassert>
+#else
+#include <assert.h>
+#endif
+
+#endif
diff --git a/include/boost/predef/detail/_exception.h b/include/boost/predef/detail/_exception.h
new file mode 100644
index 0000000..f5a6687
--- /dev/null
+++ b/include/boost/predef/detail/_exception.h
@@ -0,0 +1,15 @@
+/*
+Copyright Rene Rivera 2011-2012
+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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL__EXCEPTION_H
+#define BOOST_PREDEF_DETAIL__EXCEPTION_H
+
+#if defined(__cplusplus)
+#include <exception>
+#endif
+
+#endif
diff --git a/include/boost/predef/detail/comp_detected.h b/include/boost/predef/detail/comp_detected.h
new file mode 100644
index 0000000..fda1801
--- /dev/null
+++ b/include/boost/predef/detail/comp_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2014
+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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_COMP_DETECTED
+#define BOOST_PREDEF_DETAIL_COMP_DETECTED 1
+#endif
diff --git a/include/boost/predef/detail/endian_compat.h b/include/boost/predef/detail/endian_compat.h
new file mode 100644
index 0000000..7725e68
--- /dev/null
+++ b/include/boost/predef/detail/endian_compat.h
@@ -0,0 +1,26 @@
+/*
+Copyright Rene Rivera 2013
+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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H
+#define BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H
+
+#include <boost/predef/other/endian.h>
+
+#if BOOST_ENDIAN_BIG_BYTE
+#   define BOOST_BIG_ENDIAN
+#   define BOOST_BYTE_ORDER 4321
+#endif
+#if BOOST_ENDIAN_LITTLE_BYTE
+#   define BOOST_LITTLE_ENDIAN
+#   define BOOST_BYTE_ORDER 1234
+#endif
+#if BOOST_ENDIAN_LITTLE_WORD
+#   define BOOST_PDP_ENDIAN
+#   define BOOST_BYTE_ORDER 2134
+#endif
+
+#endif
diff --git a/include/boost/predef/detail/os_detected.h b/include/boost/predef/detail/os_detected.h
new file mode 100644
index 0000000..08e10f9
--- /dev/null
+++ b/include/boost/predef/detail/os_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2013
+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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_OS_DETECTED
+#define BOOST_PREDEF_DETAIL_OS_DETECTED 1
+#endif
diff --git a/include/boost/predef/detail/platform_detected.h b/include/boost/predef/detail/platform_detected.h
new file mode 100644
index 0000000..4faf693
--- /dev/null
+++ b/include/boost/predef/detail/platform_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2014
+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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_PLAT_DETECTED
+#define BOOST_PREDEF_DETAIL_PLAT_DETECTED 1
+#endif
diff --git a/include/boost/predef/detail/test.h b/include/boost/predef/detail/test.h
new file mode 100644
index 0000000..546a9e4
--- /dev/null
+++ b/include/boost/predef/detail/test.h
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 2011-2012
+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)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_TEST_H
+#define BOOST_PREDEF_DETAIL_TEST_H
+
+#if !defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+
+#define BOOST_PREDEF_DECLARE_TEST(x,s)
+
+#endif
+
+#endif
diff --git a/include/boost/predef/detail/test_def.h b/include/boost/predef/detail/test_def.h
new file mode 100644
index 0000000..c2f195b
--- /dev/null
+++ b/include/boost/predef/detail/test_def.h
@@ -0,0 +1,71 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include <boost/predef.h>
+
+#define BOOST_PREDEF_INTERNAL_GENERATE_TESTS
+
+void * add_predef_entry(const char * name, const char * description, unsigned value);
+#undef BOOST_PREDEF_DECLARE_TEST
+#define BOOST_PREDEF_DECLARE_TEST(x,s) void predef_entry_##x() { add_predef_entry(#x, s, x); }
+#include <boost/predef.h>
+
+#undef BOOST_PREDEF_DECLARE_TEST
+#define BOOST_PREDEF_DECLARE_TEST(x,s) predef_entry_##x();
+void create_predef_entries()
+{
+#include <boost/predef.h>
+}
+
+#ifdef __cplusplus
+#include <cstring>
+#include <cstdio>
+#include <cstdlib>
+using namespace std;
+#else
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#endif
+
+typedef struct predef_info
+{
+    const char * name;
+    const char * description;
+    unsigned value;
+} predef_info;
+
+#ifdef __cplusplus
+using namespace std;
+#endif
+
+unsigned generated_predef_info_count = 0;
+predef_info* generated_predef_info = 0;
+void * add_predef_entry(const char * name, const char * description, unsigned value)
+{
+    if (0 == generated_predef_info_count)
+    {
+        generated_predef_info_count = 1;
+        generated_predef_info = (predef_info*)malloc(sizeof(predef_info));
+    }
+    else
+    {
+        generated_predef_info_count += 1;
+        generated_predef_info = (predef_info*)realloc(generated_predef_info,
+            generated_predef_info_count*sizeof(predef_info));
+    }
+    generated_predef_info[generated_predef_info_count-1].name = name;
+    generated_predef_info[generated_predef_info_count-1].description = description;
+    generated_predef_info[generated_predef_info_count-1].value = value;
+    return 0;
+}
+
+int predef_info_compare(const void * a, const void * b)
+{
+    const predef_info * i = (const predef_info *)a;
+    const predef_info * j = (const predef_info *)b;
+    return strcmp(i->name,j->name);
+}
diff --git a/include/boost/predef/hardware.h b/include/boost/predef/hardware.h
new file mode 100644
index 0000000..972b73a
--- /dev/null
+++ b/include/boost/predef/hardware.h
@@ -0,0 +1,16 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#if !defined(BOOST_PREDEF_HARDWARE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_HARDWARE_H
+#define BOOST_PREDEF_HARDWARE_H
+#endif
+
+#include <boost/predef/hardware/simd.h>
+
+#endif
diff --git a/include/boost/predef/hardware/simd.h b/include/boost/predef/hardware/simd.h
new file mode 100644
index 0000000..ac5c9da
--- /dev/null
+++ b/include/boost/predef/hardware/simd.h
@@ -0,0 +1,119 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#include <boost/predef/hardware/simd/x86.h>
+#include <boost/predef/hardware/simd/x86_amd.h>
+#include <boost/predef/hardware/simd/arm.h>
+#include <boost/predef/hardware/simd/ppc.h>
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_H
+#define BOOST_PREDEF_HARDWARE_SIMD_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ [section Using the `BOOST_HW_SIMD_*` predefs]
+ [include ../doc/hardware_simd.qbk]
+ [endsect]
+
+ [/ --------------------------- ]
+
+ [section `BOOST_HW_SIMD_*`]
+
+ [heading `BOOST_HW_SIMD`]
+
+ The SIMD extension detected for a specific architectures.
+ Version number depends on the detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`BOOST_HW_SIMD_X86_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_X86_AMD_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_ARM_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_PPC_AVAILABLE`] [__predef_detection__]]
+     ]
+
+ [include ../include/boost/predef/hardware/simd/x86.h]
+ [include ../include/boost/predef/hardware/simd/x86_amd.h]
+ [include ../include/boost/predef/hardware/simd/arm.h]
+ [include ../include/boost/predef/hardware/simd/ppc.h]
+
+ [endsect]
+
+ [/ --------------------------- ]
+
+ [section `BOOST_HW_SIMD_X86_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/x86/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_X86_AMD_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/x86_amd/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_ARM_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/arm/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_PPC_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/ppc/versions.h]
+ [endsect]
+
+ */
+
+// We check if SIMD extension of multiples architectures have been detected,
+// if yes, then this is an error!
+//
+// NOTE: _X86_AMD implies _X86, so there is no need to check for it here!
+//
+#if defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_PPC_AVAILABLE) ||\
+    defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE) ||\
+    defined(BOOST_HW_SIMD_PPC_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE)
+#   error "Multiple SIMD architectures detected, this cannot happen!"
+#endif
+
+#if defined(BOOST_HW_SIMD_X86_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)
+    // If both standard _X86 and _X86_AMD are available,
+    // then take the biggest version of the two!
+#   if BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_AMD
+#      define BOOST_HW_SIMD BOOST_HW_SIMD_X86
+#   else
+#      define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD
+#   endif
+#endif
+
+#if !defined(BOOST_HW_SIMD)
+    // At this point, only one of these two is defined
+#   if defined(BOOST_HW_SIMD_X86_AVAILABLE)
+#      define BOOST_HW_SIMD BOOST_HW_SIMD_X86
+#   endif
+#   if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)
+#      define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD
+#   endif
+#endif
+
+#if defined(BOOST_HW_SIMD_ARM_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_ARM
+#endif
+
+#if defined(BOOST_HW_SIMD_PPC_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_PPC
+#endif
+
+#if defined(BOOST_HW_SIMD)
+#   define BOOST_HW_SIMD_AVAILABLE
+#else
+#   define BOOST_HW_SIMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_NAME "Hardware SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD, BOOST_HW_SIMD_NAME)
diff --git a/include/boost/predef/hardware/simd/arm.h b/include/boost/predef/hardware/simd/arm.h
new file mode 100644
index 0000000..3b3fc3f
--- /dev/null
+++ b/include/boost/predef/hardware/simd/arm.h
@@ -0,0 +1,59 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_H
+#define BOOST_PREDEF_HARDWARE_SIMD_ARM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/arm/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_ARM`]
+
+ The SIMD extension for ARM (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__ARM_NEON__`] [__predef_detection__]]
+     [[`__aarch64__`] [__predef_detection__]]
+     [[`_M_ARM`] [__predef_detection__]]
+     [[`_M_ARM64`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__ARM_NEON__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     [[`__aarch64__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     [[`_M_ARM`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     [[`_M_ARM64`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_ARM
+#if !defined(BOOST_HW_SIMD_ARM) && (defined(__ARM_NEON__) || defined(__aarch64__) || defined (_M_ARM) || defined (_M_ARM64))
+#   define BOOST_HW_SIMD_ARM BOOST_HW_SIMD_ARM_NEON_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_ARM)
+#   define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_ARM_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_ARM_NAME "ARM SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_ARM, BOOST_HW_SIMD_ARM_NAME)
diff --git a/include/boost/predef/hardware/simd/arm/versions.h b/include/boost/predef/hardware/simd/arm/versions.h
new file mode 100644
index 0000000..8425b31
--- /dev/null
+++ b/include/boost/predef/hardware/simd/arm/versions.h
@@ -0,0 +1,32 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent ARM SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_ARM`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_ARM_NEON_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29 NEON]
+ ARM extension version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_ARM_NEON_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+#endif
diff --git a/include/boost/predef/hardware/simd/ppc.h b/include/boost/predef/hardware/simd/ppc.h
new file mode 100644
index 0000000..eef25c2
--- /dev/null
+++ b/include/boost/predef/hardware/simd/ppc.h
@@ -0,0 +1,69 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_H
+#define BOOST_PREDEF_HARDWARE_SIMD_PPC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/ppc/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC`]
+
+ The SIMD extension for PowerPC (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__VECTOR4DOUBLE__`] [__predef_detection__]]
+
+     [[`__ALTIVEC__`] [__predef_detection__]]
+     [[`__VEC__`] [__predef_detection__]]
+
+     [[`__VSX__`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__VECTOR4DOUBLE__`] [BOOST_HW_SIMD_PPC_QPX_VERSION]]
+
+     [[`__ALTIVEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]
+     [[`__VEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]
+
+     [[`__VSX__`] [BOOST_HW_SIMD_PPC_VSX_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_PPC
+#if !defined(BOOST_HW_SIMD_PPC) && defined(__VECTOR4DOUBLE__)
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_QPX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_PPC) && defined(__VSX__)
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VSX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_PPC) && (defined(__ALTIVEC__) || defined(__VEC__))
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VMX_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_PPC)
+#   define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_PPC_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_PPC_NAME "PPC SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_PPC, BOOST_HW_SIMD_PPC_NAME)
diff --git a/include/boost/predef/hardware/simd/ppc/versions.h b/include/boost/predef/hardware/simd/ppc/versions.h
new file mode 100644
index 0000000..ffe3f0b
--- /dev/null
+++ b/include/boost/predef/hardware/simd/ppc/versions.h
@@ -0,0 +1,51 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent Power PC SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_PPC`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_VMX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/AltiVec#VMX128 VMX] powerpc extension
+ version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_PPC_VMX_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_VSX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/AltiVec#VSX VSX] powerpc extension version
+ number.
+
+ Version number is: *1.1.0*.
+ */
+#define BOOST_HW_SIMD_PPC_VSX_VERSION BOOST_VERSION_NUMBER(1, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_QPX_VERSION`]
+
+ The QPX powerpc extension version number.
+
+ Version number is: *2.0.0*.
+ */
+#define BOOST_HW_SIMD_PPC_QPX_VERSION BOOST_VERSION_NUMBER(2, 0, 0)
+
+#endif
diff --git a/include/boost/predef/hardware/simd/x86.h b/include/boost/predef/hardware/simd/x86.h
new file mode 100644
index 0000000..88bd81e
--- /dev/null
+++ b/include/boost/predef/hardware/simd/x86.h
@@ -0,0 +1,123 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/x86/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_X86`]
+
+ The SIMD extension for x86 (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE__`] [__predef_detection__]]
+     [[`_M_X64`] [__predef_detection__]]
+     [[`_M_IX86_FP >= 1`] [__predef_detection__]]
+
+     [[`__SSE2__`] [__predef_detection__]]
+     [[`_M_X64`] [__predef_detection__]]
+     [[`_M_IX86_FP >= 2`] [__predef_detection__]]
+
+     [[`__SSE3__`] [__predef_detection__]]
+
+     [[`__SSSE3__`] [__predef_detection__]]
+
+     [[`__SSE4_1__`] [__predef_detection__]]
+
+     [[`__SSE4_2__`] [__predef_detection__]]
+
+     [[`__AVX__`] [__predef_detection__]]
+
+     [[`__FMA__`] [__predef_detection__]]
+
+     [[`__AVX2__`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE__`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+     [[`_M_IX86_FP >= 1`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+
+     [[`__SSE2__`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+     [[`_M_IX86_FP >= 2`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+
+     [[`__SSE3__`] [BOOST_HW_SIMD_X86_SSE3_VERSION]]
+
+     [[`__SSSE3__`] [BOOST_HW_SIMD_X86_SSSE3_VERSION]]
+
+     [[`__SSE4_1__`] [BOOST_HW_SIMD_X86_SSE4_1_VERSION]]
+
+     [[`__SSE4_2__`] [BOOST_HW_SIMD_X86_SSE4_2_VERSION]]
+
+     [[`__AVX__`] [BOOST_HW_SIMD_X86_AVX_VERSION]]
+
+     [[`__FMA__`] [BOOST_HW_SIMD_X86_FMA3_VERSION]]
+
+     [[`__AVX2__`] [BOOST_HW_SIMD_X86_AVX2_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_X86
+#if !defined(BOOST_HW_SIMD_X86) && defined(__MIC__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MIC_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX2__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__FMA__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_FMA_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_2__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_1__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_1_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSSE3__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSSE3_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE3__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE3_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2))
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1))
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__MMX__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MMX_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_X86)
+#   define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_X86_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_X86_NAME "x86 SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86, BOOST_HW_SIMD_X86_NAME)
diff --git a/include/boost/predef/hardware/simd/x86/versions.h b/include/boost/predef/hardware/simd/x86/versions.h
new file mode 100644
index 0000000..0c7a4d3
--- /dev/null
+++ b/include/boost/predef/hardware/simd/x86/versions.h
@@ -0,0 +1,129 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent x86 SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_MMX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/MMX_(instruction_set) MMX] x86 extension
+ version number.
+
+ Version number is: *0.99.0*.
+ */
+#define BOOST_HW_SIMD_X86_MMX_VERSION BOOST_VERSION_NUMBER(0, 99, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions SSE] x86 extension
+ version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE2 SSE2] x86 extension version number.
+
+ Version number is: *2.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE2_VERSION BOOST_VERSION_NUMBER(2, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE3 SSE3] x86 extension version number.
+
+ Version number is: *3.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE3_VERSION BOOST_VERSION_NUMBER(3, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSSE3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSSE3 SSSE3] x86 extension version number.
+
+ Version number is: *3.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSSE3_VERSION BOOST_VERSION_NUMBER(3, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4_1_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE4#SSE4.1 SSE4_1] x86 extension version
+ number.
+
+ Version number is: *4.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE4_1_VERSION BOOST_VERSION_NUMBER(4, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4_2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE4##SSE4.2 SSE4_2] x86 extension version
+ number.
+
+ Version number is: *4.2.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE4_2_VERSION BOOST_VERSION_NUMBER(4, 2, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AVX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions AVX] x86
+ extension version number.
+
+ Version number is: *5.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_AVX_VERSION BOOST_VERSION_NUMBER(5, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_FMA3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/FMA_instruction_set FMA3] x86 extension
+ version number.
+
+ Version number is: *5.2.0*.
+ */
+#define BOOST_HW_SIMD_X86_FMA3_VERSION BOOST_VERSION_NUMBER(5, 2, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AVX2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2 AVX2]
+ x86 extension version number.
+
+ Version number is: *5.3.0*.
+ */
+#define BOOST_HW_SIMD_X86_AVX2_VERSION BOOST_VERSION_NUMBER(5, 3, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_MIC_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Xeon_Phi MIC] (Xeon Phi) x86 extension
+ version number.
+
+ Version number is: *9.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_MIC_VERSION BOOST_VERSION_NUMBER(9, 0, 0)
+
+#endif
diff --git a/include/boost/predef/hardware/simd/x86_amd.h b/include/boost/predef/hardware/simd/x86_amd.h
new file mode 100644
index 0000000..c80d1ce
--- /dev/null
+++ b/include/boost/predef/hardware/simd/x86_amd.h
@@ -0,0 +1,87 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/x86_amd/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AMD`]
+
+ The SIMD extension for x86 (AMD) (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE4A__`] [__predef_detection__]]
+
+     [[`__FMA4__`] [__predef_detection__]]
+
+     [[`__XOP__`] [__predef_detection__]]
+
+     [[`BOOST_HW_SIMD_X86`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE4A__`] [BOOST_HW_SIMD_X86_SSE4A_VERSION]]
+
+     [[`__FMA4__`] [BOOST_HW_SIMD_X86_FMA4_VERSION]]
+
+     [[`__XOP__`] [BOOST_HW_SIMD_X86_XOP_VERSION]]
+
+     [[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_X86]]
+     ]
+
+ [note This predef includes every other x86 SIMD extensions and also has other
+ more specific extensions (FMA4, XOP, SSE4a). You should use this predef
+ instead of `BOOST_HW_SIMD_X86` to test if those specific extensions have
+ been detected.]
+
+ */
+
+#define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+// AMD CPUs also use x86 architecture. We first try to detect if any AMD
+// specific extension are detected, if yes, then try to detect more recent x86
+// common extensions.
+
+#undef BOOST_HW_SIMD_X86_AMD
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__XOP__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_XOP_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__FMA4__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_FMA4_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__SSE4A__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_X86_AMD)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+    // At this point, we know that we have an AMD CPU, we do need to check for
+    // other x86 extensions to determine the final version number.
+#   include <boost/predef/hardware/simd/x86.h>
+#   if BOOST_HW_SIMD_X86 > BOOST_HW_SIMD_X86_AMD
+#      undef BOOST_HW_SIMD_X86_AMD
+#      define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86
+#   endif
+#   define BOOST_HW_SIMD_X86_AMD_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_X86_AMD_NAME "x86 (AMD) SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86_AMD, BOOST_HW_SIMD_X86_AMD_NAME)
diff --git a/include/boost/predef/hardware/simd/x86_amd/versions.h b/include/boost/predef/hardware/simd/x86_amd/versions.h
new file mode 100644
index 0000000..1f9e96c
--- /dev/null
+++ b/include/boost/predef/hardware/simd/x86_amd/versions.h
@@ -0,0 +1,51 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 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)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent x86 (AMD specific) SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86_AMD`.]
+ */
+
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/SSE4##SSE4A SSE4A] x86 extension (AMD specific).
+
+ Version number is: *4.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION BOOST_VERSION_NUMBER(4, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AMD_FMA4_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/FMA_instruction_set#FMA4_instruction_set FMA4] x86 extension (AMD specific).
+
+ Version number is: *5.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_FMA4_VERSION BOOST_VERSION_NUMBER(5, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AMD_XOP_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).
+
+ Version number is: *5.1.1*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_XOP_VERSION BOOST_VERSION_NUMBER(5, 1, 1)
+
+
+#endif
diff --git a/include/boost/predef/language.h b/include/boost/predef/language.h
new file mode 100644
index 0000000..9ce3cc9
--- /dev/null
+++ b/include/boost/predef/language.h
@@ -0,0 +1,18 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#if !defined(BOOST_PREDEF_LANGUAGE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LANGUAGE_H
+#define BOOST_PREDEF_LANGUAGE_H
+#endif
+
+#include <boost/predef/language/stdc.h>
+#include <boost/predef/language/stdcpp.h>
+#include <boost/predef/language/objc.h>
+#include <boost/predef/language/cuda.h>
+
+#endif
diff --git a/include/boost/predef/language/cuda.h b/include/boost/predef/language/cuda.h
new file mode 100644
index 0000000..5c5fed3
--- /dev/null
+++ b/include/boost/predef/language/cuda.h
@@ -0,0 +1,52 @@
+/*
+Copyright Benjamin Worpitz 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)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_CUDA_H
+#define BOOST_PREDEF_LANGUAGE_CUDA_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_CUDA`]
+
+[@https://en.wikipedia.org/wiki/CUDA CUDA C/C++] language.
+If available, the version is detected as VV.RR.P.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__CUDACC__`] [__predef_detection__]]
+    [[`__CUDA__`] [__predef_detection__]]
+
+    [[`CUDA_VERSION`] [VV.RR.P]]
+    ]
+ */
+
+#define BOOST_LANG_CUDA BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__CUDACC__) || defined(__CUDA__)
+#   undef BOOST_LANG_CUDA
+#   include <cuda.h>
+#   if defined(CUDA_VERSION)
+#       define BOOST_LANG_CUDA BOOST_PREDEF_MAKE_10_VVRRP(CUDA_VERSION)
+#   else
+#       define BOOST_LANG_CUDA BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LANG_CUDA
+#   define BOOST_LANG_CUDA_AVAILABLE
+#endif
+
+#define BOOST_LANG_CUDA_NAME "CUDA C/C++"
+
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_CUDA,BOOST_LANG_CUDA_NAME)
diff --git a/include/boost/predef/language/objc.h b/include/boost/predef/language/objc.h
new file mode 100644
index 0000000..24e3ad3
--- /dev/null
+++ b/include/boost/predef/language/objc.h
@@ -0,0 +1,42 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_OBJC_H
+#define BOOST_PREDEF_LANGUAGE_OBJC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_OBJC`]
+
+[@http://en.wikipedia.org/wiki/Objective-C Objective-C] language.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__OBJC__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__OBJC__)
+#   undef BOOST_LANG_OBJC
+#   define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LANG_OBJC
+#   define BOOST_LANG_OBJC_AVAILABLE
+#endif
+
+#define BOOST_LANG_OBJC_NAME "Objective-C"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_OBJC,BOOST_LANG_OBJC_NAME)
diff --git a/include/boost/predef/language/stdc.h b/include/boost/predef/language/stdc.h
new file mode 100644
index 0000000..db25c12
--- /dev/null
+++ b/include/boost/predef/language/stdc.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_STDC_H
+#define BOOST_PREDEF_LANGUAGE_STDC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_STDC`]
+
+[@http://en.wikipedia.org/wiki/C_(programming_language) Standard C] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__STDC__`] [__predef_detection__]]
+
+    [[`__STDC_VERSION__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LANG_STDC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STDC__)
+#   undef BOOST_LANG_STDC
+#   if defined(__STDC_VERSION__)
+#       if (__STDC_VERSION__ > 100)
+#           define BOOST_LANG_STDC BOOST_PREDEF_MAKE_YYYYMM(__STDC_VERSION__)
+#       else
+#           define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   else
+#       define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LANG_STDC
+#   define BOOST_LANG_STDC_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDC_NAME "Standard C"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDC,BOOST_LANG_STDC_NAME)
diff --git a/include/boost/predef/language/stdcpp.h b/include/boost/predef/language/stdcpp.h
new file mode 100644
index 0000000..34dc8c7
--- /dev/null
+++ b/include/boost/predef/language/stdcpp.h
@@ -0,0 +1,121 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_STDCPP_H
+#define BOOST_PREDEF_LANGUAGE_STDCPP_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_STDCPP`]
+
+[@http://en.wikipedia.org/wiki/C%2B%2B Standard C++] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+Because of the way the C++ standardization process works the
+defined version year will not be the commonly known year of the standard.
+Specifically the defined versions are:
+
+[table Detected Version Number vs. C++ Standard Year
+  [[Detected Version Number] [Standard Year] [C++ Standard]]
+  [[27.11.1] [1998] [ISO/IEC 14882:1998]]
+  [[41.12.1] [2011] [ISO/IEC 14882:2011]]
+]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__cplusplus`] [__predef_detection__]]
+
+    [[`__cplusplus`] [YYYY.MM.1]]
+    ]
+ */
+
+#define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__cplusplus)
+#   undef BOOST_LANG_STDCPP
+#   if (__cplusplus > 100)
+#       define BOOST_LANG_STDCPP BOOST_PREDEF_MAKE_YYYYMM(__cplusplus)
+#   else
+#       define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LANG_STDCPP
+#   define BOOST_LANG_STDCPP_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDCPP_NAME "Standard C++"
+
+/*`
+[heading `BOOST_LANG_STDCPPCLI`]
+
+[@http://en.wikipedia.org/wiki/C%2B%2B/CLI Standard C++/CLI] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__cplusplus_cli`] [__predef_detection__]]
+
+    [[`__cplusplus_cli`] [YYYY.MM.1]]
+    ]
+ */
+
+#define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__cplusplus_cli)
+#   undef BOOST_LANG_STDCPPCLI
+#   if (__cplusplus_cli > 100)
+#       define BOOST_LANG_STDCPPCLI BOOST_PREDEF_MAKE_YYYYMM(__cplusplus_cli)
+#   else
+#       define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LANG_STDCPPCLI
+#   define BOOST_LANG_STDCPPCLI_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDCPPCLI_NAME "Standard C++/CLI"
+
+/*`
+[heading `BOOST_LANG_STDECPP`]
+
+[@http://en.wikipedia.org/wiki/Embedded_C%2B%2B Standard Embedded C++] language.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__embedded_cplusplus`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__embedded_cplusplus)
+#   undef BOOST_LANG_STDECPP
+#   define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LANG_STDECPP
+#   define BOOST_LANG_STDECPP_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDECPP_NAME "Standard Embedded C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPP,BOOST_LANG_STDCPP_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPPCLI,BOOST_LANG_STDCPPCLI_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDECPP,BOOST_LANG_STDECPP_NAME)
diff --git a/include/boost/predef/library.h b/include/boost/predef/library.h
new file mode 100644
index 0000000..40518a9
--- /dev/null
+++ b/include/boost/predef/library.h
@@ -0,0 +1,16 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#if !defined(BOOST_PREDEF_LIBRARY_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LIBRARY_H
+#define BOOST_PREDEF_LIBRARY_H
+#endif
+
+#include <boost/predef/library/c.h>
+#include <boost/predef/library/std.h>
+
+#endif
diff --git a/include/boost/predef/library/c.h b/include/boost/predef/library/c.h
new file mode 100644
index 0000000..7ca84cc
--- /dev/null
+++ b/include/boost/predef/library/c.h
@@ -0,0 +1,21 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#if !defined(BOOST_PREDEF_LIBRARY_C_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LIBRARY_C_H
+#define BOOST_PREDEF_LIBRARY_C_H
+#endif
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/library/c/cloudabi.h>
+#include <boost/predef/library/c/gnu.h>
+#include <boost/predef/library/c/uc.h>
+#include <boost/predef/library/c/vms.h>
+#include <boost/predef/library/c/zos.h>
+
+#endif
diff --git a/include/boost/predef/library/c/_prefix.h b/include/boost/predef/library/c/_prefix.h
new file mode 100644
index 0000000..12bcb0f
--- /dev/null
+++ b/include/boost/predef/library/c/_prefix.h
@@ -0,0 +1,13 @@
+/*
+Copyright Rene Rivera 2008-2013
+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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C__PREFIX_H
+#define BOOST_PREDEF_LIBRARY_C__PREFIX_H
+
+#include <boost/predef/detail/_cassert.h>
+
+#endif
diff --git a/include/boost/predef/library/c/cloudabi.h b/include/boost/predef/library/c/cloudabi.h
new file mode 100644
index 0000000..e6acaee
--- /dev/null
+++ b/include/boost/predef/library/c/cloudabi.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 James E. King III
+ *
+ * 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)
+ */
+
+#ifndef BOOST_PREDEF_LIBRARY_C_CLOUDABI_H
+#define BOOST_PREDEF_LIBRARY_C_CLOUDABI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+#include <boost/predef/library/c/_prefix.h>
+
+#if defined(__CloudABI__)
+#include <stddef.h>
+#endif
+
+/*`
+[heading `BOOST_LIB_C_CLOUDABI`]
+
+[@https://github.com/NuxiNL/cloudlibc cloudlibc] - CloudABI's standard C library.
+Version number available as major, and minor.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__cloudlibc__`] [__predef_detection__]]
+
+    [[`__cloudlibc_major__`, `__cloudlibc_minor__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_LIB_C_CLOUDABI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__cloudlibc__)
+#   undef BOOST_LIB_C_CLOUDABI
+#   define BOOST_LIB_C_CLOUDABI \
+            BOOST_VERSION_NUMBER(__cloudlibc_major__,__cloudlibc_minor__,0)
+#endif
+
+#if BOOST_LIB_C_CLOUDABI
+#   define BOOST_LIB_C_CLOUDABI_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_CLOUDABI_NAME "cloudlibc"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_CLOUDABI,BOOST_LIB_C_CLOUDABI_NAME)
diff --git a/include/boost/predef/library/c/gnu.h b/include/boost/predef/library/c/gnu.h
new file mode 100644
index 0000000..9e4ca89
--- /dev/null
+++ b/include/boost/predef/library/c/gnu.h
@@ -0,0 +1,61 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_GNU_H
+#define BOOST_PREDEF_LIBRARY_C_GNU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+#include <boost/predef/library/c/_prefix.h>
+
+#if defined(__STDC__)
+#include <stddef.h>
+#elif defined(__cplusplus)
+#include <cstddef>
+#endif
+
+/*`
+[heading `BOOST_LIB_C_GNU`]
+
+[@http://en.wikipedia.org/wiki/Glibc GNU glibc] Standard C library.
+Version number available as major, and minor.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GLIBC__`] [__predef_detection__]]
+    [[`__GNU_LIBRARY__`] [__predef_detection__]]
+
+    [[`__GLIBC__`, `__GLIBC_MINOR__`] [V.R.0]]
+    [[`__GNU_LIBRARY__`, `__GNU_LIBRARY_MINOR__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_LIB_C_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GLIBC__) || defined(__GNU_LIBRARY__)
+#   undef BOOST_LIB_C_GNU
+#   if defined(__GLIBC__)
+#       define BOOST_LIB_C_GNU \
+            BOOST_VERSION_NUMBER(__GLIBC__,__GLIBC_MINOR__,0)
+#   else
+#       define BOOST_LIB_C_GNU \
+            BOOST_VERSION_NUMBER(__GNU_LIBRARY__,__GNU_LIBRARY_MINOR__,0)
+#   endif
+#endif
+
+#if BOOST_LIB_C_GNU
+#   define BOOST_LIB_C_GNU_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_GNU_NAME "GNU"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_GNU,BOOST_LIB_C_GNU_NAME)
diff --git a/include/boost/predef/library/c/uc.h b/include/boost/predef/library/c/uc.h
new file mode 100644
index 0000000..03081e9
--- /dev/null
+++ b/include/boost/predef/library/c/uc.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_UC_H
+#define BOOST_PREDEF_LIBRARY_C_UC_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_UC`]
+
+[@http://en.wikipedia.org/wiki/Uclibc uClibc] Standard C library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__UCLIBC__`] [__predef_detection__]]
+
+    [[`__UCLIBC_MAJOR__`, `__UCLIBC_MINOR__`, `__UCLIBC_SUBLEVEL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_C_UC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__UCLIBC__)
+#   undef BOOST_LIB_C_UC
+#   define BOOST_LIB_C_UC BOOST_VERSION_NUMBER(\
+        __UCLIBC_MAJOR__,__UCLIBC_MINOR__,__UCLIBC_SUBLEVEL__)
+#endif
+
+#if BOOST_LIB_C_UC
+#   define BOOST_LIB_C_UC_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_UC_NAME "uClibc"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_UC,BOOST_LIB_C_UC_NAME)
diff --git a/include/boost/predef/library/c/vms.h b/include/boost/predef/library/c/vms.h
new file mode 100644
index 0000000..685f1a7
--- /dev/null
+++ b/include/boost/predef/library/c/vms.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_VMS_H
+#define BOOST_PREDEF_LIBRARY_C_VMS_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_VMS`]
+
+VMS libc Standard C library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__CRTL_VER`] [__predef_detection__]]
+
+    [[`__CRTL_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_C_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__CRTL_VER)
+#   undef BOOST_LIB_C_VMS
+#   define BOOST_LIB_C_VMS BOOST_PREDEF_MAKE_10_VVRR0PP00(__CRTL_VER)
+#endif
+
+#if BOOST_LIB_C_VMS
+#   define BOOST_LIB_C_VMS_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_VMS_NAME "VMS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_VMS,BOOST_LIB_C_VMS_NAME)
diff --git a/include/boost/predef/library/c/zos.h b/include/boost/predef/library/c/zos.h
new file mode 100644
index 0000000..222d355
--- /dev/null
+++ b/include/boost/predef/library/c/zos.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_ZOS_H
+#define BOOST_PREDEF_LIBRARY_C_ZOS_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_ZOS`]
+
+z/OS libc Standard C library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__LIBREL__`] [__predef_detection__]]
+
+    [[`__LIBREL__`] [V.R.P]]
+    [[`__TARGET_LIB__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__LIBREL__)
+#   undef BOOST_LIB_C_ZOS
+#   if !defined(BOOST_LIB_C_ZOS) && defined(__LIBREL__)
+#       define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__LIBREL__)
+#   endif
+#   if !defined(BOOST_LIB_C_ZOS) && defined(__TARGET_LIB__)
+#       define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__TARGET_LIB__)
+#   endif
+#   if !defined(BOOST_LIB_C_ZOS)
+#       define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_C_ZOS
+#   define BOOST_LIB_C_ZOS_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_ZOS_NAME "z/OS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_ZOS,BOOST_LIB_C_ZOS_NAME)
diff --git a/include/boost/predef/library/std.h b/include/boost/predef/library/std.h
new file mode 100644
index 0000000..403b6ff
--- /dev/null
+++ b/include/boost/predef/library/std.h
@@ -0,0 +1,25 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+#if !defined(BOOST_PREDEF_LIBRARY_STD_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LIBRARY_STD_H
+#define BOOST_PREDEF_LIBRARY_STD_H
+#endif
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/library/std/cxx.h>
+#include <boost/predef/library/std/dinkumware.h>
+#include <boost/predef/library/std/libcomo.h>
+#include <boost/predef/library/std/modena.h>
+#include <boost/predef/library/std/msl.h>
+#include <boost/predef/library/std/roguewave.h>
+#include <boost/predef/library/std/sgi.h>
+#include <boost/predef/library/std/stdcpp3.h>
+#include <boost/predef/library/std/stlport.h>
+#include <boost/predef/library/std/vacpp.h>
+
+#endif
diff --git a/include/boost/predef/library/std/_prefix.h b/include/boost/predef/library/std/_prefix.h
new file mode 100644
index 0000000..932b855
--- /dev/null
+++ b/include/boost/predef/library/std/_prefix.h
@@ -0,0 +1,23 @@
+/*
+Copyright Rene Rivera 2008-2013
+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)
+*/
+#ifndef BOOST_PREDEF_LIBRARY_STD__PREFIX_H
+#define BOOST_PREDEF_LIBRARY_STD__PREFIX_H
+
+/*
+We need to include an STD header to gives us the context
+of which library we are using. The "smallest" code-wise header
+seems to be <exception>. Boost uses <utility> but as far
+as I can tell (RR) it's not a stand-alone header in most
+implementations. Using <exception> also has the benefit of
+being available in EC++, so we get a chance to make this work
+for embedded users. And since it's not a header impacted by TR1
+there's no magic needed for inclusion in the face of the
+Boost.TR1 library.
+*/
+#include <boost/predef/detail/_exception.h>
+
+#endif
diff --git a/include/boost/predef/library/std/cxx.h b/include/boost/predef/library/std/cxx.h
new file mode 100644
index 0000000..07b52cd
--- /dev/null
+++ b/include/boost/predef/library/std/cxx.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_CXX_H
+#define BOOST_PREDEF_LIBRARY_STD_CXX_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_CXX`]
+
+[@http://libcxx.llvm.org/ libc++] C++ Standard Library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_LIBCPP_VERSION`] [__predef_detection__]]
+
+    [[`_LIBCPP_VERSION`] [V.0.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_CXX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_LIBCPP_VERSION)
+#   undef BOOST_LIB_STD_CXX
+#   define BOOST_LIB_STD_CXX BOOST_PREDEF_MAKE_10_VPPP(_LIBCPP_VERSION)
+#endif
+
+#if BOOST_LIB_STD_CXX
+#   define BOOST_LIB_STD_CXX_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_CXX_NAME "libc++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_CXX,BOOST_LIB_STD_CXX_NAME)
diff --git a/include/boost/predef/library/std/dinkumware.h b/include/boost/predef/library/std/dinkumware.h
new file mode 100644
index 0000000..0fc0776
--- /dev/null
+++ b/include/boost/predef/library/std/dinkumware.h
@@ -0,0 +1,52 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_DINKUMWARE_H
+#define BOOST_PREDEF_LIBRARY_STD_DINKUMWARE_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_DINKUMWARE`]
+
+[@http://en.wikipedia.org/wiki/Dinkumware Dinkumware] Standard C++ Library.
+If available version number as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_YVALS`, `__IBMCPP__`] [__predef_detection__]]
+    [[`_CPPLIB_VER`] [__predef_detection__]]
+
+    [[`_CPPLIB_VER`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+#   undef BOOST_LIB_STD_DINKUMWARE
+#   if defined(_CPPLIB_VER)
+#       define BOOST_LIB_STD_DINKUMWARE BOOST_PREDEF_MAKE_10_VVRR(_CPPLIB_VER)
+#   else
+#       define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_STD_DINKUMWARE
+#   define BOOST_LIB_STD_DINKUMWARE_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_DINKUMWARE_NAME "Dinkumware"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_DINKUMWARE,BOOST_LIB_STD_DINKUMWARE_NAME)
diff --git a/include/boost/predef/library/std/libcomo.h b/include/boost/predef/library/std/libcomo.h
new file mode 100644
index 0000000..97d4a53
--- /dev/null
+++ b/include/boost/predef/library/std/libcomo.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_LIBCOMO_H
+#define BOOST_PREDEF_LIBRARY_STD_LIBCOMO_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_COMO`]
+
+[@http://www.comeaucomputing.com/libcomo/ Comeau Computing] Standard C++ Library.
+Version number available as major.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__LIBCOMO__`] [__predef_detection__]]
+
+    [[`__LIBCOMO_VERSION__`] [V.0.0]]
+    ]
+ */
+
+#define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__LIBCOMO__)
+#   undef BOOST_LIB_STD_COMO
+#   define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER(__LIBCOMO_VERSION__,0,0)
+#endif
+
+#if BOOST_LIB_STD_COMO
+#   define BOOST_LIB_STD_COMO_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_COMO_NAME "Comeau Computing"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_COMO,BOOST_LIB_STD_COMO_NAME)
diff --git a/include/boost/predef/library/std/modena.h b/include/boost/predef/library/std/modena.h
new file mode 100644
index 0000000..b67ac62
--- /dev/null
+++ b/include/boost/predef/library/std/modena.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_MODENA_H
+#define BOOST_PREDEF_LIBRARY_STD_MODENA_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_MSIPL`]
+
+[@http://modena.us/ Modena Software Lib++] Standard C++ Library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`MSIPL_COMPILE_H`] [__predef_detection__]]
+    [[`__MSIPL_COMPILE_H`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(MSIPL_COMPILE_H) || defined(__MSIPL_COMPILE_H)
+#   undef BOOST_LIB_STD_MSIPL
+#   define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LIB_STD_MSIPL
+#   define BOOST_LIB_STD_MSIPL_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_MSIPL_NAME "Modena Software Lib++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSIPL,BOOST_LIB_STD_MSIPL_NAME)
diff --git a/include/boost/predef/library/std/msl.h b/include/boost/predef/library/std/msl.h
new file mode 100644
index 0000000..d73c74c
--- /dev/null
+++ b/include/boost/predef/library/std/msl.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_MSL_H
+#define BOOST_PREDEF_LIBRARY_STD_MSL_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_MSL`]
+
+[@http://www.freescale.com/ Metrowerks] Standard C++ Library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MSL_CPP__`] [__predef_detection__]]
+    [[`__MSL__`] [__predef_detection__]]
+
+    [[`__MSL_CPP__`] [V.R.P]]
+    [[`__MSL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_MSL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MSL_CPP__) || defined(__MSL__)
+#   undef BOOST_LIB_STD_MSL
+#   if defined(__MSL_CPP__)
+#       define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL_CPP__)
+#   else
+#       define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL__)
+#   endif
+#endif
+
+#if BOOST_LIB_STD_MSL
+#   define BOOST_LIB_STD_MSL_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_MSL_NAME "Metrowerks"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSL,BOOST_LIB_STD_MSL_NAME)
diff --git a/include/boost/predef/library/std/roguewave.h b/include/boost/predef/library/std/roguewave.h
new file mode 100644
index 0000000..9c3f288
--- /dev/null
+++ b/include/boost/predef/library/std/roguewave.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_ROGUEWAVE_H
+#define BOOST_PREDEF_LIBRARY_STD_ROGUEWAVE_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_RW`]
+
+[@http://stdcxx.apache.org/ Roguewave] Standard C++ library.
+If available version number as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__STD_RWCOMPILER_H__`] [__predef_detection__]]
+    [[`_RWSTD_VER`] [__predef_detection__]]
+
+    [[`_RWSTD_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+#   undef BOOST_LIB_STD_RW
+#   if defined(_RWSTD_VER)
+#       if _RWSTD_VER < 0x010000
+#           define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRP(_RWSTD_VER)
+#       else
+#           define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRPP(_RWSTD_VER)
+#       endif
+#   else
+#       define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_STD_RW
+#   define BOOST_LIB_STD_RW_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_RW_NAME "Roguewave"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_RW,BOOST_LIB_STD_RW_NAME)
diff --git a/include/boost/predef/library/std/sgi.h b/include/boost/predef/library/std/sgi.h
new file mode 100644
index 0000000..5d19bba
--- /dev/null
+++ b/include/boost/predef/library/std/sgi.h
@@ -0,0 +1,51 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_SGI_H
+#define BOOST_PREDEF_LIBRARY_STD_SGI_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_SGI`]
+
+[@http://www.sgi.com/tech/stl/ SGI] Standard C++ library.
+If available version number as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__STL_CONFIG_H`] [__predef_detection__]]
+
+    [[`__SGI_STL`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STL_CONFIG_H)
+#   undef BOOST_LIB_STD_SGI
+#   if defined(__SGI_STL)
+#       define BOOST_LIB_STD_SGI BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL)
+#   else
+#       define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_STD_SGI
+#   define BOOST_LIB_STD_SGI_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_SGI_NAME "SGI"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_SGI,BOOST_LIB_STD_SGI_NAME)
diff --git a/include/boost/predef/library/std/stdcpp3.h b/include/boost/predef/library/std/stdcpp3.h
new file mode 100644
index 0000000..c980292
--- /dev/null
+++ b/include/boost/predef/library/std/stdcpp3.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_STDCPP3_H
+#define BOOST_PREDEF_LIBRARY_STD_STDCPP3_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_GNU`]
+
+[@http://gcc.gnu.org/libstdc++/ GNU libstdc++] Standard C++ library.
+Version number available as year (from 1970), month, and day.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GLIBCXX__`] [__predef_detection__]]
+    [[`__GLIBCPP__`] [__predef_detection__]]
+
+    [[`__GLIBCXX__`] [V.R.P]]
+    [[`__GLIBCPP__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GLIBCPP__) || defined(__GLIBCXX__)
+#   undef BOOST_LIB_STD_GNU
+#   if defined(__GLIBCXX__)
+#       define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCXX__)
+#   else
+#       define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCPP__)
+#   endif
+#endif
+
+#if BOOST_LIB_STD_GNU
+#   define BOOST_LIB_STD_GNU_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_GNU_NAME "GNU"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_GNU,BOOST_LIB_STD_GNU_NAME)
diff --git a/include/boost/predef/library/std/stlport.h b/include/boost/predef/library/std/stlport.h
new file mode 100644
index 0000000..c09483b
--- /dev/null
+++ b/include/boost/predef/library/std/stlport.h
@@ -0,0 +1,59 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_STLPORT_H
+#define BOOST_PREDEF_LIBRARY_STD_STLPORT_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_STLPORT`]
+
+[@http://sourceforge.net/projects/stlport/ STLport Standard C++] library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SGI_STL_PORT`] [__predef_detection__]]
+    [[`_STLPORT_VERSION`] [__predef_detection__]]
+
+    [[`_STLPORT_MAJOR`, `_STLPORT_MINOR`, `_STLPORT_PATCHLEVEL`] [V.R.P]]
+    [[`_STLPORT_VERSION`] [V.R.P]]
+    [[`__SGI_STL_PORT`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_STLPORT BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+#   undef BOOST_LIB_STD_STLPORT
+#   if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_MAJOR)
+#       define BOOST_LIB_STD_STLPORT \
+            BOOST_VERSION_NUMBER(_STLPORT_MAJOR,_STLPORT_MINOR,_STLPORT_PATCHLEVEL)
+#   endif
+#   if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_VERSION)
+#       define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(_STLPORT_VERSION)
+#   endif
+#   if !defined(BOOST_LIB_STD_STLPORT)
+#       define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL_PORT)
+#   endif
+#endif
+
+#if BOOST_LIB_STD_STLPORT
+#   define BOOST_LIB_STD_STLPORT_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_STLPORT_NAME "STLport"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_STLPORT,BOOST_LIB_STD_STLPORT_NAME)
diff --git a/include/boost/predef/library/std/vacpp.h b/include/boost/predef/library/std/vacpp.h
new file mode 100644
index 0000000..632f846
--- /dev/null
+++ b/include/boost/predef/library/std/vacpp.h
@@ -0,0 +1,44 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_VACPP_H
+#define BOOST_PREDEF_LIBRARY_STD_VACPP_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_IBM`]
+
+[@http://www.ibm.com/software/awdtools/xlcpp/ IBM VACPP Standard C++] library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__IBMCPP__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IBMCPP__)
+#   undef BOOST_LIB_STD_IBM
+#   define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LIB_STD_IBM
+#   define BOOST_LIB_STD_IBM_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_IBM_NAME "IBM VACPP"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_IBM,BOOST_LIB_STD_IBM_NAME)
diff --git a/include/boost/predef/make.h b/include/boost/predef/make.h
new file mode 100644
index 0000000..fccd2d3
--- /dev/null
+++ b/include/boost/predef/make.h
@@ -0,0 +1,97 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+#include <boost/predef/detail/test.h>
+
+#ifndef BOOST_PREDEF_MAKE_H
+#define BOOST_PREDEF_MAKE_H
+
+/*
+Shorthands for the common version number formats used by vendors...
+*/
+
+/*`
+[heading `BOOST_PREDEF_MAKE_..` macros]
+
+These set of macros decompose common vendor version number
+macros which are composed version, revision, and patch digits.
+The naming convention indicates:
+
+* The base of the specified version number. "`BOOST_PREDEF_MAKE_0X`" for
+  hexadecimal digits, and "`BOOST_PREDEF_MAKE_10`" for decimal digits.
+* The format of the vendor version number. Where "`V`" indicates the version digits,
+  "`R`" indicates the revision digits, "`P`" indicates the patch digits, and "`0`"
+  indicates an ignored digit.
+
+Macros are:
+*/
+/*` `BOOST_PREDEF_MAKE_0X_VRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRP(V) BOOST_VERSION_NUMBER((V&0xF00)>>8,(V&0xF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRP(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VRPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRPP(V) BOOST_VERSION_NUMBER((V&0xF000)>>12,(V&0xF00)>>8,(V&0xFF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRR(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRR(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xFF),0)
+/*` `BOOST_PREDEF_MAKE_0X_VRRPPPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRRPPPP(V) BOOST_VERSION_NUMBER((V&0xF000000)>>24,(V&0xFF0000)>>16,(V&0xFFFF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRRP(V) BOOST_VERSION_NUMBER((V&0xFF000)>>12,(V&0xFF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VRRPP000(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRRPP000(V) BOOST_VERSION_NUMBER((V&0xF0000000)>>28,(V&0xFF00000)>>20,(V&0xFF000)>>12)
+/*` `BOOST_PREDEF_MAKE_0X_VVRRPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRRPP(V) BOOST_VERSION_NUMBER((V&0xFF0000)>>16,(V&0xFF00)>>8,(V&0xFF))
+/*` `BOOST_PREDEF_MAKE_10_VPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VPPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,0,(V)%1000)
+/*` `BOOST_PREDEF_MAKE_10_VR0(V)` */
+#define BOOST_PREDEF_MAKE_10_VR0(V) BOOST_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,0)
+/*` `BOOST_PREDEF_MAKE_10_VRP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRP(V) BOOST_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,(V)%10)
+/*` `BOOST_PREDEF_MAKE_10_VRP000(V)` */
+#define BOOST_PREDEF_MAKE_10_VRP000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,((V)/1000)%10)
+/*` `BOOST_PREDEF_MAKE_10_VRPPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRPPPP(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,(V)%10000)
+/*` `BOOST_PREDEF_MAKE_10_VRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,((V)/100)%10,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VRR(V)` */
+#define BOOST_PREDEF_MAKE_10_VRR(V) BOOST_VERSION_NUMBER(((V)/100)%10,(V)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VRRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%10,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VRR000(V)` */
+#define BOOST_PREDEF_MAKE_10_VRR000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/1000)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VV00(V)` */
+#define BOOST_PREDEF_MAKE_10_VV00(V) BOOST_VERSION_NUMBER(((V)/100)%100,0,0)
+/*` `BOOST_PREDEF_MAKE_10_VVRR(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR(V) BOOST_VERSION_NUMBER(((V)/100)%100,(V)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VVRRP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRRP(V) BOOST_VERSION_NUMBER(((V)/1000)%100,((V)/10)%100,(V)%10)
+/*` `BOOST_PREDEF_MAKE_10_VVRRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%100,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VVRRPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRRPPP(V) BOOST_VERSION_NUMBER(((V)/100000)%100,((V)/1000)%100,(V)%1000)
+/*` `BOOST_PREDEF_MAKE_10_VVRR0PP00(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR0PP00(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,((V)/100)%100)
+/*` `BOOST_PREDEF_MAKE_10_VVRR0PPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR0PPPP(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,(V)%10000)
+/*` `BOOST_PREDEF_MAKE_10_VVRR00PP00(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR00PP00(V) BOOST_VERSION_NUMBER(((V)/100000000)%100,((V)/1000000)%100,((V)/100)%100)
+/*`
+[heading `BOOST_PREDEF_MAKE_*..` date macros]
+
+Date decomposition macros return a date in the relative to the 1970
+Epoch date. If the month is not available, January 1st is used as the month and day.
+If the day is not available, but the month is, the 1st of the month is used as the day.
+*/
+/*` `BOOST_PREDEF_MAKE_DATE(Y,M,D)` */
+#define BOOST_PREDEF_MAKE_DATE(Y,M,D) BOOST_VERSION_NUMBER((Y)%10000-1970,(M)%100,(D)%100)
+/*` `BOOST_PREDEF_MAKE_YYYYMMDD(V)` */
+#define BOOST_PREDEF_MAKE_YYYYMMDD(V) BOOST_PREDEF_MAKE_DATE(((V)/10000)%10000,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_YYYY(V)` */
+#define BOOST_PREDEF_MAKE_YYYY(V) BOOST_PREDEF_MAKE_DATE(V,1,1)
+/*` `BOOST_PREDEF_MAKE_YYYYMM(V)` */
+#define BOOST_PREDEF_MAKE_YYYYMM(V) BOOST_PREDEF_MAKE_DATE((V)/100,(V)%100,1)
+
+#endif
diff --git a/include/boost/predef/os.h b/include/boost/predef/os.h
new file mode 100644
index 0000000..bedf99e
--- /dev/null
+++ b/include/boost/predef/os.h
@@ -0,0 +1,33 @@
+/*
+Copyright Rene Rivera 2008-2015
+Copyright Franz Detro 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_OS_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_OS_H
+#define BOOST_PREDEF_OS_H
+#endif
+
+#include <boost/predef/os/aix.h>
+#include <boost/predef/os/amigaos.h>
+#include <boost/predef/os/android.h>
+#include <boost/predef/os/beos.h>
+#include <boost/predef/os/bsd.h>
+#include <boost/predef/os/cygwin.h>
+#include <boost/predef/os/haiku.h>
+#include <boost/predef/os/hpux.h>
+#include <boost/predef/os/irix.h>
+#include <boost/predef/os/ios.h>
+#include <boost/predef/os/linux.h>
+#include <boost/predef/os/macos.h>
+#include <boost/predef/os/os400.h>
+#include <boost/predef/os/qnxnto.h>
+#include <boost/predef/os/solaris.h>
+#include <boost/predef/os/unix.h>
+#include <boost/predef/os/vms.h>
+#include <boost/predef/os/windows.h>
+
+#endif
diff --git a/include/boost/predef/os/aix.h b/include/boost/predef/os/aix.h
new file mode 100644
index 0000000..3e5a953
--- /dev/null
+++ b/include/boost/predef/os/aix.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_AIX_H
+#define BOOST_PREDEF_OS_AIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_AIX`]
+
+[@http://en.wikipedia.org/wiki/AIX_operating_system IBM AIX] operating system.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_AIX`] [__predef_detection__]]
+    [[`__TOS_AIX__`] [__predef_detection__]]
+
+    [[`_AIX43`] [4.3.0]]
+    [[`_AIX41`] [4.1.0]]
+    [[`_AIX32`] [3.2.0]]
+    [[`_AIX3`] [3.0.0]]
+    ]
+ */
+
+#define BOOST_OS_AIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(_AIX) || defined(__TOS_AIX__) \
+    )
+#   undef BOOST_OS_AIX
+#   if !defined(BOOST_OS_AIX) && defined(_AIX43)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,3,0)
+#   endif
+#   if !defined(BOOST_OS_AIX) && defined(_AIX41)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,1,0)
+#   endif
+#   if !defined(BOOST_OS_AIX) && defined(_AIX32)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,2,0)
+#   endif
+#   if !defined(BOOST_OS_AIX) && defined(_AIX3)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_OS_AIX)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_AIX
+#   define BOOST_OS_AIX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_AIX_NAME "IBM AIX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_AIX,BOOST_OS_AIX_NAME)
diff --git a/include/boost/predef/os/amigaos.h b/include/boost/predef/os/amigaos.h
new file mode 100644
index 0000000..7b32ddf
--- /dev/null
+++ b/include/boost/predef/os/amigaos.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_AMIGAOS_H
+#define BOOST_PREDEF_OS_AMIGAOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_AMIGAOS`]
+
+[@http://en.wikipedia.org/wiki/AmigaOS AmigaOS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`AMIGA`] [__predef_detection__]]
+    [[`__amigaos__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(AMIGA) || defined(__amigaos__) \
+    )
+#   undef BOOST_OS_AMIGAOS
+#   define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_AMIGAOS
+#   define BOOST_OS_AMIGAOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_AMIGAOS_NAME "AmigaOS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_AMIGAOS,BOOST_OS_AMIGAOS_NAME)
diff --git a/include/boost/predef/os/android.h b/include/boost/predef/os/android.h
new file mode 100644
index 0000000..125dbde
--- /dev/null
+++ b/include/boost/predef/os/android.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_OS_ANDROID_H
+#define BOOST_PREDEF_OS_ANDROID_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_ANDROID`]
+
+[@http://en.wikipedia.org/wiki/Android_%28operating_system%29 Android] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__ANDROID__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__ANDROID__) \
+    )
+#   undef BOOST_OS_ANDROID
+#   define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_ANDROID
+#   define BOOST_OS_ANDROID_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_ANDROID_NAME "Android"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_ANDROID,BOOST_OS_ANDROID_NAME)
diff --git a/include/boost/predef/os/beos.h b/include/boost/predef/os/beos.h
new file mode 100644
index 0000000..19f4cb7
--- /dev/null
+++ b/include/boost/predef/os/beos.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_BEOS_H
+#define BOOST_PREDEF_OS_BEOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_BEOS`]
+
+[@http://en.wikipedia.org/wiki/BeOS BeOS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__BEOS__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_BEOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__BEOS__) \
+    )
+#   undef BOOST_OS_BEOS
+#   define BOOST_OS_BEOS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_BEOS
+#   define BOOST_OS_BEOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BEOS_NAME "BeOS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BEOS,BOOST_OS_BEOS_NAME)
diff --git a/include/boost/predef/os/bsd.h b/include/boost/predef/os/bsd.h
new file mode 100644
index 0000000..fad9aed
--- /dev/null
+++ b/include/boost/predef/os/bsd.h
@@ -0,0 +1,103 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_H
+#define BOOST_PREDEF_OS_BSD_H
+
+/* Special case: OSX will define BSD predefs if the sys/param.h
+ * header is included. We can guard against that, but only if we
+ * detect OSX first. Hence we will force include OSX detection
+ * before doing any BSD detection.
+ */
+#include <boost/predef/os/macos.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_BSD`]
+
+[@http://en.wikipedia.org/wiki/Berkeley_Software_Distribution BSD] operating system.
+
+BSD has various branch operating systems possible and each detected
+individually. This detects the following variations and sets a specific
+version number macro to match:
+
+* `BOOST_OS_BSD_DRAGONFLY` [@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD]
+* `BOOST_OS_BSD_FREE` [@http://en.wikipedia.org/wiki/Freebsd FreeBSD]
+* `BOOST_OS_BSD_BSDI` [@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS]
+* `BOOST_OS_BSD_NET` [@http://en.wikipedia.org/wiki/Netbsd NetBSD]
+* `BOOST_OS_BSD_OPEN` [@http://en.wikipedia.org/wiki/Openbsd OpenBSD]
+
+[note The general `BOOST_OS_BSD` is set in all cases to indicate some form
+of BSD. If the above variants is detected the corresponding macro is also set.]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`BSD`] [__predef_detection__]]
+    [[`_SYSTYPE_BSD`] [__predef_detection__]]
+
+    [[`BSD4_2`] [4.2.0]]
+    [[`BSD4_3`] [4.3.0]]
+    [[`BSD4_4`] [4.4.0]]
+    [[`BSD`] [V.R.0]]
+    ]
+ */
+
+#include <boost/predef/os/bsd/bsdi.h>
+#include <boost/predef/os/bsd/dragonfly.h>
+#include <boost/predef/os/bsd/free.h>
+#include <boost/predef/os/bsd/open.h>
+#include <boost/predef/os/bsd/net.h>
+
+#ifndef BOOST_OS_BSD
+#define BOOST_OS_BSD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#endif
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(BSD) || \
+    defined(_SYSTYPE_BSD) \
+    )
+#   undef BOOST_OS_BSD
+#   include <sys/param.h>
+#   if !defined(BOOST_OS_BSD) && defined(BSD4_4)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD) && defined(BSD4_3)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD) && defined(BSD4_2)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD) && defined(BSD)
+#       define BOOST_OS_BSD BOOST_PREDEF_MAKE_10_VVRR(BSD)
+#   endif
+#   if !defined(BOOST_OS_BSD)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD
+#   define BOOST_OS_BSD_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_NAME "BSD"
+
+#else
+
+#include <boost/predef/os/bsd/bsdi.h>
+#include <boost/predef/os/bsd/dragonfly.h>
+#include <boost/predef/os/bsd/free.h>
+#include <boost/predef/os/bsd/open.h>
+#include <boost/predef/os/bsd/net.h>
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD,BOOST_OS_BSD_NAME)
diff --git a/include/boost/predef/os/bsd/bsdi.h b/include/boost/predef/os/bsd/bsdi.h
new file mode 100644
index 0000000..afdcd3e
--- /dev/null
+++ b/include/boost/predef/os/bsd/bsdi.h
@@ -0,0 +1,48 @@
+/*
+Copyright Rene Rivera 2012-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_BSDI_H
+#define BOOST_PREDEF_OS_BSD_BSDI_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_BSDI`]
+
+[@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__bsdi__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__bsdi__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_BSDI
+#   define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_BSD_BSDI
+#   define BOOST_OS_BSD_BSDI_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_BSDI_NAME "BSDi BSD/OS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_BSDI,BOOST_OS_BSD_BSDI_NAME)
diff --git a/include/boost/predef/os/bsd/dragonfly.h b/include/boost/predef/os/bsd/dragonfly.h
new file mode 100644
index 0000000..1d07579
--- /dev/null
+++ b/include/boost/predef/os/bsd/dragonfly.h
@@ -0,0 +1,50 @@
+/*
+Copyright Rene Rivera 2012-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_DRAGONFLY_H
+#define BOOST_PREDEF_OS_BSD_DRAGONFLY_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_DRAGONFLY`]
+
+[@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DragonFly__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_BSD_DRAGONFLY BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__DragonFly__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_DRAGONFLY
+#   if defined(__DragonFly__)
+#       define BOOST_OS_DRAGONFLY_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD_DRAGONFLY
+#   define BOOST_OS_BSD_DRAGONFLY_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_DRAGONFLY_NAME "DragonFly BSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_DRAGONFLY,BOOST_OS_BSD_DRAGONFLY_NAME)
diff --git a/include/boost/predef/os/bsd/free.h b/include/boost/predef/os/bsd/free.h
new file mode 100644
index 0000000..81c0021
--- /dev/null
+++ b/include/boost/predef/os/bsd/free.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2012-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_FREE_H
+#define BOOST_PREDEF_OS_BSD_FREE_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_FREE`]
+
+[@http://en.wikipedia.org/wiki/Freebsd FreeBSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__FreeBSD__`] [__predef_detection__]]
+
+    [[`__FreeBSD_version`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__FreeBSD__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_FREE
+#   include <sys/param.h>
+#   if defined(__FreeBSD_version)
+#       if __FreeBSD_version == 491000
+#           define BOOST_OS_BSD_FREE \
+                BOOST_VERSION_NUMBER(4, 10, 0)
+#       elif __FreeBSD_version == 492000
+#           define BOOST_OS_BSD_FREE \
+                BOOST_VERSION_NUMBER(4, 11, 0)
+#       elif __FreeBSD_version < 500000
+#           define BOOST_OS_BSD_FREE \
+                BOOST_PREDEF_MAKE_10_VRPPPP(__FreeBSD_version)
+#       else
+#           define BOOST_OS_BSD_FREE \
+                BOOST_PREDEF_MAKE_10_VVRRPPP(__FreeBSD_version)
+#       endif
+#   else
+#       define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD_FREE
+#   define BOOST_OS_BSD_FREE_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_FREE_NAME "Free BSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_FREE,BOOST_OS_BSD_FREE_NAME)
diff --git a/include/boost/predef/os/bsd/net.h b/include/boost/predef/os/bsd/net.h
new file mode 100644
index 0000000..387cbde
--- /dev/null
+++ b/include/boost/predef/os/bsd/net.h
@@ -0,0 +1,84 @@
+/*
+Copyright Rene Rivera 2012-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_NET_H
+#define BOOST_PREDEF_OS_BSD_NET_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_NET`]
+
+[@http://en.wikipedia.org/wiki/Netbsd NetBSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__NETBSD__`] [__predef_detection__]]
+    [[`__NetBSD__`] [__predef_detection__]]
+
+    [[`__NETBSD_version`] [V.R.P]]
+    [[`NetBSD0_8`] [0.8.0]]
+    [[`NetBSD0_9`] [0.9.0]]
+    [[`NetBSD1_0`] [1.0.0]]
+    [[`__NetBSD_Version`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__NETBSD__) || defined(__NetBSD__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_NET
+#   if defined(__NETBSD__)
+#       if defined(__NETBSD_version)
+#           if __NETBSD_version < 500000
+#               define BOOST_OS_BSD_NET \
+                    BOOST_PREDEF_MAKE_10_VRP000(__NETBSD_version)
+#           else
+#               define BOOST_OS_BSD_NET \
+                    BOOST_PREDEF_MAKE_10_VRR000(__NETBSD_version)
+#           endif
+#       else
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   elif defined(__NetBSD__)
+#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_8)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,8,0)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_9)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,9,0)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD1_0)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(1,0,0)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET) && defined(__NetBSD_Version)
+#           define BOOST_OS_BSD_NET \
+                BOOST_PREDEF_MAKE_10_VVRR00PP00(__NetBSD_Version)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#endif
+
+#if BOOST_OS_BSD_NET
+#   define BOOST_OS_BSD_NET_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_NET_NAME "DragonFly BSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_NET,BOOST_OS_BSD_NET_NAME)
diff --git a/include/boost/predef/os/bsd/open.h b/include/boost/predef/os/bsd/open.h
new file mode 100644
index 0000000..f6ccd24
--- /dev/null
+++ b/include/boost/predef/os/bsd/open.h
@@ -0,0 +1,251 @@
+/*
+Copyright Rene Rivera 2012-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_OPEN_H
+#define BOOST_PREDEF_OS_BSD_OPEN_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_OPEN`]
+
+[@http://en.wikipedia.org/wiki/Openbsd OpenBSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__OpenBSD__`] [__predef_detection__]]
+
+    [[`OpenBSD2_0`] [2.0.0]]
+    [[`OpenBSD2_1`] [2.1.0]]
+    [[`OpenBSD2_2`] [2.2.0]]
+    [[`OpenBSD2_3`] [2.3.0]]
+    [[`OpenBSD2_4`] [2.4.0]]
+    [[`OpenBSD2_5`] [2.5.0]]
+    [[`OpenBSD2_6`] [2.6.0]]
+    [[`OpenBSD2_7`] [2.7.0]]
+    [[`OpenBSD2_8`] [2.8.0]]
+    [[`OpenBSD2_9`] [2.9.0]]
+    [[`OpenBSD3_0`] [3.0.0]]
+    [[`OpenBSD3_1`] [3.1.0]]
+    [[`OpenBSD3_2`] [3.2.0]]
+    [[`OpenBSD3_3`] [3.3.0]]
+    [[`OpenBSD3_4`] [3.4.0]]
+    [[`OpenBSD3_5`] [3.5.0]]
+    [[`OpenBSD3_6`] [3.6.0]]
+    [[`OpenBSD3_7`] [3.7.0]]
+    [[`OpenBSD3_8`] [3.8.0]]
+    [[`OpenBSD3_9`] [3.9.0]]
+    [[`OpenBSD4_0`] [4.0.0]]
+    [[`OpenBSD4_1`] [4.1.0]]
+    [[`OpenBSD4_2`] [4.2.0]]
+    [[`OpenBSD4_3`] [4.3.0]]
+    [[`OpenBSD4_4`] [4.4.0]]
+    [[`OpenBSD4_5`] [4.5.0]]
+    [[`OpenBSD4_6`] [4.6.0]]
+    [[`OpenBSD4_7`] [4.7.0]]
+    [[`OpenBSD4_8`] [4.8.0]]
+    [[`OpenBSD4_9`] [4.9.0]]
+    [[`OpenBSD5_0`] [5.0.0]]
+    [[`OpenBSD5_1`] [5.1.0]]
+    [[`OpenBSD5_2`] [5.2.0]]
+    [[`OpenBSD5_3`] [5.3.0]]
+    [[`OpenBSD5_4`] [5.4.0]]
+    [[`OpenBSD5_5`] [5.5.0]]
+    [[`OpenBSD5_6`] [5.6.0]]
+    [[`OpenBSD5_7`] [5.7.0]]
+    [[`OpenBSD5_8`] [5.8.0]]
+    [[`OpenBSD5_9`] [5.9.0]]
+    [[`OpenBSD6_0`] [6.0.0]]
+    [[`OpenBSD6_1`] [6.1.0]]
+    [[`OpenBSD6_2`] [6.2.0]]
+    [[`OpenBSD6_3`] [6.3.0]]
+    [[`OpenBSD6_4`] [6.4.0]]
+    [[`OpenBSD6_5`] [6.5.0]]
+    [[`OpenBSD6_6`] [6.6.0]]
+    [[`OpenBSD6_7`] [6.7.0]]
+    [[`OpenBSD6_8`] [6.8.0]]
+    [[`OpenBSD6_9`] [6.9.0]]
+    ]
+ */
+
+#define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__OpenBSD__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_OPEN
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD5_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(5,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD6_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(6,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD_OPEN
+#   define BOOST_OS_BSD_OPEN_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_OPEN_NAME "OpenBSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_OPEN,BOOST_OS_BSD_OPEN_NAME)
diff --git a/include/boost/predef/os/cygwin.h b/include/boost/predef/os/cygwin.h
new file mode 100644
index 0000000..9d36f0f
--- /dev/null
+++ b/include/boost/predef/os/cygwin.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_CYGWIN_H
+#define BOOST_PREDEF_OS_CYGWIN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_CYGWIN`]
+
+[@http://en.wikipedia.org/wiki/Cygwin Cygwin] evironment.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__CYGWIN__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_CYGWIN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__CYGWIN__) \
+    )
+#   undef BOOST_OS_CYGWIN
+#   define BOOST_OS_CYGWIN BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_CYGWIN
+#   define BOOST_OS_CYGWIN_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_CYGWIN_NAME "Cygwin"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_CYGWIN,BOOST_OS_CYGWIN_NAME)
diff --git a/include/boost/predef/os/haiku.h b/include/boost/predef/os/haiku.h
new file mode 100644
index 0000000..d79dbea
--- /dev/null
+++ b/include/boost/predef/os/haiku.h
@@ -0,0 +1,46 @@
+/*
+Copyright Jessica Hamilton 2014
+Copyright Rene Rivera 2014-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_HAIKU_H
+#define BOOST_PREDEF_OS_HAIKU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_HAIKU`]
+
+[@http://en.wikipedia.org/wiki/Haiku_(operating_system) Haiku] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__HAIKU__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_HAIKU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__HAIKU__) \
+    )
+#   undef BOOST_OS_HAIKU
+#   define BOOST_OS_HAIKU BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_HAIKU
+#   define BOOST_OS_HAIKU_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_HAIKU_NAME "Haiku"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_HAIKU,BOOST_OS_HAIKU_NAME)
diff --git a/include/boost/predef/os/hpux.h b/include/boost/predef/os/hpux.h
new file mode 100644
index 0000000..29243f4
--- /dev/null
+++ b/include/boost/predef/os/hpux.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_HPUX_H
+#define BOOST_PREDEF_OS_HPUX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_HPUX`]
+
+[@http://en.wikipedia.org/wiki/HP-UX HP-UX] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`hpux`] [__predef_detection__]]
+    [[`_hpux`] [__predef_detection__]]
+    [[`__hpux`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_HPUX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(hpux) || defined(_hpux) || defined(__hpux) \
+    )
+#   undef BOOST_OS_HPUX
+#   define BOOST_OS_HPUX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_HPUX
+#   define BOOST_OS_HPUX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_HPUX_NAME "HP-UX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_HPUX,BOOST_OS_HPUX_NAME)
diff --git a/include/boost/predef/os/ios.h b/include/boost/predef/os/ios.h
new file mode 100644
index 0000000..f853815
--- /dev/null
+++ b/include/boost/predef/os/ios.h
@@ -0,0 +1,51 @@
+/*
+Copyright Franz Detro 2014
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_OS_IOS_H
+#define BOOST_PREDEF_OS_IOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_IOS`]
+
+[@http://en.wikipedia.org/wiki/iOS iOS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__APPLE__`] [__predef_detection__]]
+    [[`__MACH__`] [__predef_detection__]]
+    [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__predef_detection__]]
+
+    [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000]]
+    ]
+ */
+
+#define BOOST_OS_IOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__APPLE__) && defined(__MACH__) && \
+    defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \
+    )
+#   undef BOOST_OS_IOS
+#   define BOOST_OS_IOS (__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000)
+#endif
+
+#if BOOST_OS_IOS
+#   define BOOST_OS_IOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_IOS_NAME "iOS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_IOS,BOOST_OS_IOS_NAME)
diff --git a/include/boost/predef/os/irix.h b/include/boost/predef/os/irix.h
new file mode 100644
index 0000000..fa6ac41
--- /dev/null
+++ b/include/boost/predef/os/irix.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_IRIX_H
+#define BOOST_PREDEF_OS_IRIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_IRIX`]
+
+[@http://en.wikipedia.org/wiki/Irix IRIX] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`sgi`] [__predef_detection__]]
+    [[`__sgi`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_IRIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(sgi) || defined(__sgi) \
+    )
+#   undef BOOST_OS_IRIX
+#   define BOOST_OS_IRIX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_IRIX
+#   define BOOST_OS_IRIX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_IRIX_NAME "IRIX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_IRIX,BOOST_OS_IRIX_NAME)
diff --git a/include/boost/predef/os/linux.h b/include/boost/predef/os/linux.h
new file mode 100644
index 0000000..a297d08
--- /dev/null
+++ b/include/boost/predef/os/linux.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_LINUX_H
+#define BOOST_PREDEF_OS_LINUX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_LINUX`]
+
+[@http://en.wikipedia.org/wiki/Linux Linux] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`linux`] [__predef_detection__]]
+    [[`__linux`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_LINUX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(linux) || defined(__linux) \
+    )
+#   undef BOOST_OS_LINUX
+#   define BOOST_OS_LINUX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_LINUX
+#   define BOOST_OS_LINUX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_LINUX_NAME "Linux"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_LINUX,BOOST_OS_LINUX_NAME)
diff --git a/include/boost/predef/os/macos.h b/include/boost/predef/os/macos.h
new file mode 100644
index 0000000..4afb30d
--- /dev/null
+++ b/include/boost/predef/os/macos.h
@@ -0,0 +1,65 @@
+/*
+Copyright Rene Rivera 2008-2015
+Copyright Franz Detro 2014
+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)
+*/
+
+#ifndef BOOST_PREDEF_OS_MACOS_H
+#define BOOST_PREDEF_OS_MACOS_H
+
+/* Special case: iOS will define the same predefs as MacOS, and additionally
+ '__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__'. We can guard against that,
+ but only if we detect iOS first. Hence we will force include iOS detection
+ * before doing any MacOS detection.
+ */
+#include <boost/predef/os/ios.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_MACOS`]
+
+[@http://en.wikipedia.org/wiki/Mac_OS Mac OS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`macintosh`] [__predef_detection__]]
+    [[`Macintosh`] [__predef_detection__]]
+    [[`__APPLE__`] [__predef_detection__]]
+    [[`__MACH__`] [__predef_detection__]]
+
+    [[`__APPLE__`, `__MACH__`] [10.0.0]]
+    [[ /otherwise/ ] [9.0.0]]
+    ]
+ */
+
+#define BOOST_OS_MACOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(macintosh) || defined(Macintosh) || \
+    (defined(__APPLE__) && defined(__MACH__)) \
+    )
+#   undef BOOST_OS_MACOS
+#   if !defined(BOOST_OS_MACOS) && defined(__APPLE__) && defined(__MACH__)
+#       define BOOST_OS_MACOS BOOST_VERSION_NUMBER(10,0,0)
+#   endif
+#   if !defined(BOOST_OS_MACOS)
+#       define BOOST_OS_MACOS BOOST_VERSION_NUMBER(9,0,0)
+#   endif
+#endif
+
+#if BOOST_OS_MACOS
+#   define BOOST_OS_MACOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_MACOS_NAME "Mac OS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_MACOS,BOOST_OS_MACOS_NAME)
diff --git a/include/boost/predef/os/os400.h b/include/boost/predef/os/os400.h
new file mode 100644
index 0000000..b3446c2
--- /dev/null
+++ b/include/boost/predef/os/os400.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_OS400_H
+#define BOOST_PREDEF_OS_OS400_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_OS400`]
+
+[@http://en.wikipedia.org/wiki/IBM_i IBM OS/400] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__OS400__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_OS400 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__OS400__) \
+    )
+#   undef BOOST_OS_OS400
+#   define BOOST_OS_OS400 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_OS400
+#   define BOOST_OS_OS400_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_OS400_NAME "IBM OS/400"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_OS400,BOOST_OS_OS400_NAME)
diff --git a/include/boost/predef/os/qnxnto.h b/include/boost/predef/os/qnxnto.h
new file mode 100644
index 0000000..e76fbf2
--- /dev/null
+++ b/include/boost/predef/os/qnxnto.h
@@ -0,0 +1,59 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_QNXNTO_H
+#define BOOST_PREDEF_OS_QNXNTO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_QNX`]
+
+[@http://en.wikipedia.org/wiki/QNX QNX] operating system.
+Version number available as major, and minor if possible. And
+version 4 is specifically detected.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__QNX__`] [__predef_detection__]]
+    [[`__QNXNTO__`] [__predef_detection__]]
+
+    [[`_NTO_VERSION`] [V.R.0]]
+    [[`__QNX__`] [4.0.0]]
+    ]
+ */
+
+#define BOOST_OS_QNX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__QNX__) || defined(__QNXNTO__) \
+    )
+#   undef BOOST_OS_QNX
+#   if !defined(BOOST_OS_QNX) && defined(_NTO_VERSION)
+#       define BOOST_OS_QNX BOOST_PREDEF_MAKE_10_VVRR(_NTO_VERSION)
+#   endif
+#   if !defined(BOOST_OS_QNX) && defined(__QNX__)
+#       define BOOST_OS_QNX BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_OS_QNX)
+#       define BOOST_OS_QNX BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_QNX
+#   define BOOST_OS_QNX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_QNX_NAME "QNX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_QNX,BOOST_OS_QNX_NAME)
diff --git a/include/boost/predef/os/solaris.h b/include/boost/predef/os/solaris.h
new file mode 100644
index 0000000..75ddc91
--- /dev/null
+++ b/include/boost/predef/os/solaris.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_SOLARIS_H
+#define BOOST_PREDEF_OS_SOLARIS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_SOLARIS`]
+
+[@http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`sun`] [__predef_detection__]]
+    [[`__sun`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(sun) || defined(__sun) \
+    )
+#   undef BOOST_OS_SOLARIS
+#   define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_SOLARIS
+#   define BOOST_OS_SOLARIS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_SOLARIS_NAME "Solaris"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_SOLARIS,BOOST_OS_SOLARIS_NAME)
diff --git a/include/boost/predef/os/unix.h b/include/boost/predef/os/unix.h
new file mode 100644
index 0000000..a607104
--- /dev/null
+++ b/include/boost/predef/os/unix.h
@@ -0,0 +1,76 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_UNIX_H
+#define BOOST_PREDEF_OS_UNIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_UNIX`]
+
+[@http://en.wikipedia.org/wiki/Unix Unix Environment] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`unix`] [__predef_detection__]]
+    [[`__unix`] [__predef_detection__]]
+    [[`_XOPEN_SOURCE`] [__predef_detection__]]
+    [[`_POSIX_SOURCE`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_UNIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(unix) || defined(__unix) || \
+    defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE)
+#   undef BOOST_OS_UNIX
+#   define BOOST_OS_UNIX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_UNIX
+#   define BOOST_OS_UNIX_AVAILABLE
+#endif
+
+#define BOOST_OS_UNIX_NAME "Unix Environment"
+
+/*`
+[heading `BOOST_OS_SVR4`]
+
+[@http://en.wikipedia.org/wiki/UNIX_System_V SVR4 Environment] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sysv__`] [__predef_detection__]]
+    [[`__SVR4`] [__predef_detection__]]
+    [[`__svr4__`] [__predef_detection__]]
+    [[`_SYSTYPE_SVR4`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sysv__) || defined(__SVR4) || \
+    defined(__svr4__) || defined(_SYSTYPE_SVR4)
+#   undef BOOST_OS_SVR4
+#   define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_SVR4
+#   define BOOST_OS_SVR4_AVAILABLE
+#endif
+
+#define BOOST_OS_SVR4_NAME "SVR4 Environment"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_UNIX,BOOST_OS_UNIX_NAME)
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_SVR4,BOOST_OS_SVR4_NAME)
diff --git a/include/boost/predef/os/vms.h b/include/boost/predef/os/vms.h
new file mode 100644
index 0000000..2f8f786
--- /dev/null
+++ b/include/boost/predef/os/vms.h
@@ -0,0 +1,52 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_VMS_H
+#define BOOST_PREDEF_OS_VMS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_VMS`]
+
+[@http://en.wikipedia.org/wiki/Vms VMS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`VMS`] [__predef_detection__]]
+    [[`__VMS`] [__predef_detection__]]
+
+    [[`__VMS_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_OS_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(VMS) || defined(__VMS) \
+    )
+#   undef BOOST_OS_VMS
+#   if defined(__VMS_VER)
+#       define BOOST_OS_VMS BOOST_PREDEF_MAKE_10_VVRR00PP00(__VMS_VER)
+#   else
+#       define BOOST_OS_VMS BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_VMS
+#   define BOOST_OS_VMS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_VMS_NAME "VMS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_VMS,BOOST_OS_VMS_NAME)
diff --git a/include/boost/predef/os/windows.h b/include/boost/predef/os/windows.h
new file mode 100644
index 0000000..9db4390
--- /dev/null
+++ b/include/boost/predef/os/windows.h
@@ -0,0 +1,51 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_OS_WINDOWS_H
+#define BOOST_PREDEF_OS_WINDOWS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_WINDOWS`]
+
+[@http://en.wikipedia.org/wiki/Category:Microsoft_Windows Microsoft Windows] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_WIN32`] [__predef_detection__]]
+    [[`_WIN64`] [__predef_detection__]]
+    [[`__WIN32__`] [__predef_detection__]]
+    [[`__TOS_WIN__`] [__predef_detection__]]
+    [[`__WINDOWS__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(_WIN32) || defined(_WIN64) || \
+    defined(__WIN32__) || defined(__TOS_WIN__) || \
+    defined(__WINDOWS__) \
+    )
+#   undef BOOST_OS_WINDOWS
+#   define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_WINDOWS
+#   define BOOST_OS_WINDOWS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_WINDOWS_NAME "Microsoft Windows"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_WINDOWS,BOOST_OS_WINDOWS_NAME)
diff --git a/include/boost/predef/other.h b/include/boost/predef/other.h
new file mode 100644
index 0000000..c09ad49
--- /dev/null
+++ b/include/boost/predef/other.h
@@ -0,0 +1,16 @@
+/*
+Copyright Rene Rivera 2013-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)
+*/
+
+#if !defined(BOOST_PREDEF_OTHER_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_OTHER_H
+#define BOOST_PREDEF_OTHER_H
+#endif
+
+#include <boost/predef/other/endian.h>
+/*#include <boost/predef/other/.h>*/
+
+#endif
diff --git a/include/boost/predef/other/endian.h b/include/boost/predef/other/endian.h
new file mode 100644
index 0000000..b42da53
--- /dev/null
+++ b/include/boost/predef/other/endian.h
@@ -0,0 +1,203 @@
+/*
+Copyright Rene Rivera 2013-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)
+*/
+
+#ifndef BOOST_PREDEF_ENDIAN_H
+#define BOOST_PREDEF_ENDIAN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/library/c/gnu.h>
+#include <boost/predef/os/macos.h>
+#include <boost/predef/os/bsd.h>
+#include <boost/predef/os/android.h>
+
+/*`
+[heading `BOOST_ENDIAN_*`]
+
+Detection of endian memory ordering. There are four defined macros
+in this header that define the various generally possible endian
+memory orderings:
+
+* `BOOST_ENDIAN_BIG_BYTE`, byte-swapped big-endian.
+* `BOOST_ENDIAN_BIG_WORD`, word-swapped big-endian.
+* `BOOST_ENDIAN_LITTLE_BYTE`, byte-swapped little-endian.
+* `BOOST_ENDIAN_LITTLE_WORD`, word-swapped little-endian.
+
+The detection is conservative in that it only identifies endianness
+that it knows for certain. In particular bi-endianness is not
+indicated as is it not practically possible to determine the
+endianness from anything but an operating system provided
+header. And the currently known headers do not define that
+programatic bi-endianness is available.
+
+This implementation is a compilation of various publicly available
+information and acquired knowledge:
+
+# The indispensable documentation of "Pre-defined Compiler Macros"
+  [@http://sourceforge.net/p/predef/wiki/Endianness Endianness].
+# The various endian specifications available in the
+  [@http://wikipedia.org/ Wikipedia] computer architecture pages.
+# Generally available searches for headers that define endianness.
+ */
+
+#define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_BIG_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+/* GNU libc provides a header defining __BYTE_ORDER, or _BYTE_ORDER.
+ * And some OSs provide some for of endian header also.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if BOOST_LIB_C_GNU || BOOST_OS_ANDROID
+#       include <endian.h>
+#   else
+#       if BOOST_OS_MACOS
+#           include <machine/endian.h>
+#       else
+#           if BOOST_OS_BSD
+#               if BOOST_OS_BSD_OPEN
+#                   include <machine/endian.h>
+#               else
+#                   include <sys/endian.h>
+#               endif
+#           endif
+#       endif
+#   endif
+#   if defined(__BYTE_ORDER)
+#       if defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN)
+#           undef BOOST_ENDIAN_BIG_BYTE
+#           define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_BYTE
+#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(__PDP_ENDIAN) && (__BYTE_ORDER == __PDP_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_WORD
+#           define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#   if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER)
+#       if defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN)
+#           undef BOOST_ENDIAN_BIG_BYTE
+#           define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(_LITTLE_ENDIAN) && (_BYTE_ORDER == _LITTLE_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_BYTE
+#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(_PDP_ENDIAN) && (_BYTE_ORDER == _PDP_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_WORD
+#           define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#endif
+
+/* Built-in byte-swpped big-endian macros.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \
+       (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \
+        defined(__ARMEB__) || \
+        defined(__THUMBEB__) || \
+        defined(__AARCH64EB__) || \
+        defined(_MIPSEB) || \
+        defined(__MIPSEB) || \
+        defined(__MIPSEB__)
+#       undef BOOST_ENDIAN_BIG_BYTE
+#       define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+/* Built-in byte-swpped little-endian macros.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
+       (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \
+        defined(__ARMEL__) || \
+        defined(__THUMBEL__) || \
+        defined(__AARCH64EL__) || \
+        defined(_MIPSEL) || \
+        defined(__MIPSEL) || \
+        defined(__MIPSEL__)
+#       undef BOOST_ENDIAN_LITTLE_BYTE
+#       define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+/* Some architectures are strictly one endianess (as opposed
+ * the current common bi-endianess).
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   include <boost/predef/architecture.h>
+#   if BOOST_ARCH_M68K || \
+        BOOST_ARCH_PARISC || \
+        BOOST_ARCH_SPARC || \
+        BOOST_ARCH_SYS370 || \
+        BOOST_ARCH_SYS390 || \
+        BOOST_ARCH_Z
+#       undef BOOST_ENDIAN_BIG_BYTE
+#       define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#   if BOOST_ARCH_IA64 || \
+        BOOST_ARCH_X86 || \
+        BOOST_ARCH_BLACKFIN
+#       undef BOOST_ENDIAN_LITTLE_BYTE
+#       define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+/* Windows on ARM, if not otherwise detected/specified, is always
+ * byte-swaped little-endian.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if BOOST_ARCH_ARM
+#       include <boost/predef/os/windows.h>
+#       if BOOST_OS_WINDOWS
+#           undef BOOST_ENDIAN_LITTLE_BYTE
+#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#endif
+
+#if BOOST_ENDIAN_BIG_BYTE
+#   define BOOST_ENDIAN_BIG_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_BIG_WORD
+#   define BOOST_ENDIAN_BIG_WORD_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_LITTLE_BYTE
+#   define BOOST_ENDIAN_LITTLE_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_LITTLE_WORD
+#   define BOOST_ENDIAN_LITTLE_WORD_BYTE_AVAILABLE
+#endif
+
+#define BOOST_ENDIAN_BIG_BYTE_NAME "Byte-Swapped Big-Endian"
+#define BOOST_ENDIAN_BIG_WORD_NAME "Word-Swapped Big-Endian"
+#define BOOST_ENDIAN_LITTLE_BYTE_NAME "Byte-Swapped Little-Endian"
+#define BOOST_ENDIAN_LITTLE_WORD_NAME "Word-Swapped Little-Endian"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_BYTE,BOOST_ENDIAN_BIG_BYTE_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_WORD,BOOST_ENDIAN_BIG_WORD_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_BYTE,BOOST_ENDIAN_LITTLE_BYTE_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_WORD,BOOST_ENDIAN_LITTLE_WORD_NAME)
diff --git a/include/boost/predef/other/workaround.h b/include/boost/predef/other/workaround.h
new file mode 100644
index 0000000..7167a18
--- /dev/null
+++ b/include/boost/predef/other/workaround.h
@@ -0,0 +1,87 @@
+/*
+Copyright Rene Rivera 2017
+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)
+*/
+
+#ifndef BOOST_PREDEF_WORKAROUND_H
+#define BOOST_PREDEF_WORKAROUND_H
+
+/*`
+[heading `BOOST_PREDEF_WORKAROUND`]
+
+``
+BOOST_PREDEF_WORKAROUND(symbol,comp,major,minor,patch)
+``
+
+Usage:
+
+``
+#if BOOST_PREDEF_WORKAROUND(BOOST_COMP_CLANG,<,3,0,0)
+    // Workaround for old clang compilers..
+#endif
+``
+
+Defines a comparison against two version numbers that depends on the definion
+of `BOOST_STRICT_CONFIG`. When `BOOST_STRICT_CONFIG` is defined this will expand
+to a value convertible to `false`. Which has the effect of disabling all code
+conditionally guarded by `BOOST_PREDEF_WORKAROUND`. When `BOOST_STRICT_CONFIG`
+is undefine this expand to test the given `symbol` version value with the
+`comp` comparison against `BOOST_VERSION_NUMBER(major,minor,patch)`.
+*/
+#ifdef BOOST_STRICT_CONFIG
+#   define BOOST_PREDEF_WORKAROUND(symbol, comp, major, minor, patch) (0)
+#else
+#   include <boost/predef/version_number.h>
+#   define BOOST_PREDEF_WORKAROUND(symbol, comp, major, minor, patch) \
+        ( (symbol) != (0) ) && \
+        ( (symbol) comp (BOOST_VERSION_NUMBER( (major) , (minor) , (patch) )) )
+#endif
+
+/*`
+[heading `BOOST_PREDEF_TESTED_AT`]
+
+``
+BOOST_PREDEF_TESTED_AT(symbol,major,minor,patch)
+``
+
+Usage:
+
+``
+#if BOOST_PREDEF_TESTED_AT(BOOST_COMP_CLANG,3,5,0)
+    // Needed for clang, and last checked for 3.5.0.
+#endif
+``
+
+Defines a comparison against two version numbers that depends on the definion
+of `BOOST_STRICT_CONFIG` and `BOOST_DETECT_OUTDATED_WORKAROUNDS`.
+When `BOOST_STRICT_CONFIG` is defined this will expand to a value convertible
+to `false`. Which has the effect of disabling all code
+conditionally guarded by `BOOST_PREDEF_TESTED_AT`. When `BOOST_STRICT_CONFIG`
+is undefined this expand to either:
+
+* A value convertible to `true` when `BOOST_DETECT_OUTDATED_WORKAROUNDS` is not
+  defined.
+* A value convertible `true` when the expansion of
+  `BOOST_PREDEF_WORKAROUND(symbol, <=, major, minor, patch)` is `true` and
+  `BOOST_DETECT_OUTDATED_WORKAROUNDS` is defined.
+* A compile error when the expansion of
+  `BOOST_PREDEF_WORKAROUND(symbol, >, major, minor, patch)` is true and
+  `BOOST_DETECT_OUTDATED_WORKAROUNDS` is defined.
+*/
+#ifdef BOOST_STRICT_CONFIG
+#   define BOOST_PREDEF_TESTED_AT(symbol, major, minor, patch) (0)
+#else
+#   ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS
+#       define BOOST_PREDEF_TESTED_AT(symbol, major, minor, patch) ( \
+            BOOST_PREDEF_WORKAROUND(symbol, <=, major, minor, patch) \
+            ? 1 \
+            : (1%0) )
+#   else
+#       define BOOST_PREDEF_TESTED_AT(symbol, major, minor, patch) \
+            ( (symbol) >= BOOST_VERSION_NUMBER_AVAILABLE )
+#   endif
+#endif
+
+#endif
diff --git a/include/boost/predef/platform.h b/include/boost/predef/platform.h
new file mode 100644
index 0000000..6c366d5
--- /dev/null
+++ b/include/boost/predef/platform.h
@@ -0,0 +1,28 @@
+/*
+Copyright Rene Rivera 2013-2015
+Copyright (c) Microsoft Corporation 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_PLATFORM_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_PLATFORM_H
+#define BOOST_PREDEF_PLATFORM_H
+#endif
+
+#include <boost/predef/platform/cloudabi.h>
+#include <boost/predef/platform/mingw.h>
+#include <boost/predef/platform/mingw32.h>
+#include <boost/predef/platform/mingw64.h>
+#include <boost/predef/platform/windows_uwp.h>
+#include <boost/predef/platform/windows_desktop.h>
+#include <boost/predef/platform/windows_phone.h>
+#include <boost/predef/platform/windows_server.h>
+#include <boost/predef/platform/windows_store.h>
+#include <boost/predef/platform/windows_system.h>
+#include <boost/predef/platform/windows_runtime.h> // deprecated
+#include <boost/predef/platform/ios.h>
+/*#include <boost/predef/platform/.h>*/
+
+#endif
diff --git a/include/boost/predef/platform/cloudabi.h b/include/boost/predef/platform/cloudabi.h
new file mode 100644
index 0000000..c44f689
--- /dev/null
+++ b/include/boost/predef/platform/cloudabi.h
@@ -0,0 +1,43 @@
+/*
+  Copyright 2017 James E. King, III
+  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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_CLOUDABI_H
+#define BOOST_PREDEF_PLAT_CLOUDABI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_PLAT_CLOUDABI`]
+
+[@https://github.com/NuxiNL/cloudabi CloudABI] platform.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__CloudABI__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_CLOUDABI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__CloudABI__)
+#   undef BOOST_PLAT_CLOUDABI
+#   define BOOST_PLAT_CLOUDABI BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_PLAT_CLOUDABI
+#   define BOOST_PLAT_CLOUDABI_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_CLOUDABI_NAME "CloudABI"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_CLOUDABI,BOOST_PLAT_CLOUDABI_NAME)
diff --git a/include/boost/predef/platform/ios.h b/include/boost/predef/platform/ios.h
new file mode 100644
index 0000000..af1c364
--- /dev/null
+++ b/include/boost/predef/platform/ios.h
@@ -0,0 +1,58 @@
+/*
+Copyright Ruslan Baratov 2017
+Copyright Rene Rivera 2017
+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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_IOS_H
+#define BOOST_PREDEF_PLAT_IOS_H
+
+#include <boost/predef/os/ios.h> // BOOST_OS_IOS
+#include <boost/predef/version_number.h> // BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+/*`
+[heading `BOOST_PLAT_IOS_DEVICE`]
+[heading `BOOST_PLAT_IOS_SIMULATOR`]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`TARGET_IPHONE_SIMULATOR`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_IOS_DEVICE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_PLAT_IOS_SIMULATOR BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h
+#if BOOST_OS_IOS
+#    include <TargetConditionals.h>
+#    if TARGET_IPHONE_SIMULATOR == 1
+#        undef BOOST_PLAT_IOS_SIMULATOR
+#        define BOOST_PLAT_IOS_SIMULATOR BOOST_VERSION_NUMBER_AVAILABLE
+#    else
+#        undef BOOST_PLAT_IOS_DEVICE
+#        define BOOST_PLAT_IOS_DEVICE BOOST_VERSION_NUMBER_AVAILABLE
+#    endif
+#endif
+
+#if BOOST_PLAT_IOS_SIMULATOR
+#    define BOOST_PLAT_IOS_SIMULATOR_AVAILABLE
+#    include <boost/predef/detail/platform_detected.h>
+#endif
+
+#if BOOST_PLAT_IOS_DEVICE
+#    define BOOST_PLAT_IOS_DEVICE_AVAILABLE
+#    include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_IOS_SIMULATOR_NAME "iOS Simulator"
+#define BOOST_PLAT_IOS_DEVICE_NAME "iOS Device"
+
+#endif // BOOST_PREDEF_PLAT_IOS_H
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_IOS_SIMULATOR,BOOST_PLAT_IOS_SIMULATOR_NAME)
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_IOS_DEVICE,BOOST_PLAT_IOS_DEVICE_NAME)
diff --git a/include/boost/predef/platform/mingw.h b/include/boost/predef/platform/mingw.h
new file mode 100644
index 0000000..c52827d
--- /dev/null
+++ b/include/boost/predef/platform/mingw.h
@@ -0,0 +1,69 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_MINGW_H
+#define BOOST_PREDEF_PLAT_MINGW_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_PLAT_MINGW`]
+
+[@http://en.wikipedia.org/wiki/MinGW MinGW] platform, either variety.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MINGW32__`] [__predef_detection__]]
+    [[`__MINGW64__`] [__predef_detection__]]
+
+    [[`__MINGW64_VERSION_MAJOR`, `__MINGW64_VERSION_MINOR`] [V.R.0]]
+    [[`__MINGW32_VERSION_MAJOR`, `__MINGW32_VERSION_MINOR`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_PLAT_MINGW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#   include <_mingw.h>
+#   if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW64_VERSION_MAJOR) && defined(__MINGW64_VERSION_MINOR))
+#       define BOOST_PLAT_MINGW_DETECTION \
+            BOOST_VERSION_NUMBER(__MINGW64_VERSION_MAJOR,__MINGW64_VERSION_MINOR,0)
+#   endif
+#   if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW32_VERSION_MAJOR) && defined(__MINGW32_VERSION_MINOR))
+#       define BOOST_PLAT_MINGW_DETECTION \
+            BOOST_VERSION_NUMBER(__MINGW32_MAJOR_VERSION,__MINGW32_MINOR_VERSION,0)
+#   endif
+#   if !defined(BOOST_PLAT_MINGW_DETECTION)
+#       define BOOST_PLAT_MINGW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_PLAT_MINGW_DETECTION
+#   define BOOST_PLAT_MINGW_AVAILABLE
+#   if defined(BOOST_PREDEF_DETAIL_PLAT_DETECTED)
+#       define BOOST_PLAT_MINGW_EMULATED BOOST_PLAT_MINGW_DETECTION
+#   else
+#       undef BOOST_PLAT_MINGW
+#       define BOOST_PLAT_MINGW BOOST_PLAT_MINGW_DETECTION
+#   endif
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_MINGW_NAME "MinGW (any variety)"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW,BOOST_PLAT_MINGW_NAME)
+
+#ifdef BOOST_PLAT_MINGW_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW_EMULATED,BOOST_PLAT_MINGW_NAME)
+#endif
diff --git a/include/boost/predef/platform/mingw32.h b/include/boost/predef/platform/mingw32.h
new file mode 100644
index 0000000..ff90038
--- /dev/null
+++ b/include/boost/predef/platform/mingw32.h
@@ -0,0 +1,63 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_MINGW32_H
+#define BOOST_PREDEF_PLAT_MINGW32_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_PLAT_MINGW32`]
+
+[@http://www.mingw.org/ MinGW] platform.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MINGW32__`] [__predef_detection__]]
+
+    [[`__MINGW32_VERSION_MAJOR`, `__MINGW32_VERSION_MINOR`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_PLAT_MINGW32 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MINGW32__)
+#   include <_mingw.h>
+#   if !defined(BOOST_PLAT_MINGW32_DETECTION) && (defined(__MINGW32_VERSION_MAJOR) && defined(__MINGW32_VERSION_MINOR))
+#       define BOOST_PLAT_MINGW32_DETECTION \
+            BOOST_VERSION_NUMBER(__MINGW32_VERSION_MAJOR,__MINGW32_VERSION_MINOR,0)
+#   endif
+#   if !defined(BOOST_PLAT_MINGW32_DETECTION)
+#       define BOOST_PLAT_MINGW32_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_PLAT_MINGW32_DETECTION
+#   define BOOST_PLAT_MINGW32_AVAILABLE
+#   if defined(BOOST_PREDEF_DETAIL_PLAT_DETECTED)
+#       define BOOST_PLAT_MINGW32_EMULATED BOOST_PLAT_MINGW32_DETECTION
+#   else
+#       undef BOOST_PLAT_MINGW32
+#       define BOOST_PLAT_MINGW32 BOOST_PLAT_MINGW32_DETECTION
+#   endif
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_MINGW32_NAME "MinGW"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW32,BOOST_PLAT_MINGW32_NAME)
+
+#ifdef BOOST_PLAT_MINGW32_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW32_EMULATED,BOOST_PLAT_MINGW32_NAME)
+#endif
diff --git a/include/boost/predef/platform/mingw64.h b/include/boost/predef/platform/mingw64.h
new file mode 100644
index 0000000..a35dd3e
--- /dev/null
+++ b/include/boost/predef/platform/mingw64.h
@@ -0,0 +1,63 @@
+/*
+Copyright Rene Rivera 2008-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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_MINGW64_H
+#define BOOST_PREDEF_PLAT_MINGW64_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_PLAT_MINGW64`]
+
+[@https://mingw-w64.org/ MinGW-w64] platform.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MINGW64__`] [__predef_detection__]]
+
+    [[`__MINGW64_VERSION_MAJOR`, `__MINGW64_VERSION_MINOR`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_PLAT_MINGW64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MINGW64__)
+#   include <_mingw.h>
+#   if !defined(BOOST_PLAT_MINGW64_DETECTION) && (defined(__MINGW64_VERSION_MAJOR) && defined(__MINGW64_VERSION_MINOR))
+#       define BOOST_PLAT_MINGW64_DETECTION \
+            BOOST_VERSION_NUMBER(__MINGW64_VERSION_MAJOR,__MINGW64_VERSION_MINOR,0)
+#   endif
+#   if !defined(BOOST_PLAT_MINGW64_DETECTION)
+#       define BOOST_PLAT_MINGW64_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_PLAT_MINGW64_DETECTION
+#   define BOOST_PLAT_MINGW64_AVAILABLE
+#   if defined(BOOST_PREDEF_DETAIL_PLAT_DETECTED)
+#       define BOOST_PLAT_MINGW64_EMULATED BOOST_PLAT_MINGW64_DETECTION
+#   else
+#       undef BOOST_PLAT_MINGW64
+#       define BOOST_PLAT_MINGW64 BOOST_PLAT_MINGW64_DETECTION
+#   endif
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_MINGW64_NAME "MinGW-w64"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW64,BOOST_PLAT_MINGW64_NAME)
+
+#ifdef BOOST_PLAT_MINGW64_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW64_EMULATED,BOOST_PLAT_MINGW64_NAME)
+#endif
diff --git a/include/boost/predef/platform/windows_desktop.h b/include/boost/predef/platform/windows_desktop.h
new file mode 100644
index 0000000..afb3907
--- /dev/null
+++ b/include/boost/predef/platform/windows_desktop.h
@@ -0,0 +1,51 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_DESKTOP_H
+#define BOOST_PREDEF_PLAT_WINDOWS_DESKTOP_H
+
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+#include <boost/predef/platform/windows_uwp.h>
+#include <boost/predef/version_number.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_DESKTOP`]
+
+[@https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide UWP]
+for Windows Desktop development.  Also available if the Platform SDK is too
+old to support UWP.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP`] [__predef_detection__]]
+    [[`!BOOST_PLAT_WINDOWS_UWP`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+    ((defined(WINAPI_FAMILY_DESKTOP_APP) && WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) || \
+     !BOOST_PLAT_WINDOWS_UWP)
+#   undef BOOST_PLAT_WINDOWS_DESKTOP
+#   define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_DESKTOP
+#   define BOOST_PLAT_WINDOWS_DESKTOP_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_DESKTOP_NAME "Windows Desktop"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_DESKTOP,BOOST_PLAT_WINDOWS_DESKTOP_NAME)
diff --git a/include/boost/predef/platform/windows_phone.h b/include/boost/predef/platform/windows_phone.h
new file mode 100644
index 0000000..0ebc76d
--- /dev/null
+++ b/include/boost/predef/platform/windows_phone.h
@@ -0,0 +1,48 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_PHONE_H
+#define BOOST_PREDEF_PLAT_WINDOWS_PHONE_H
+
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+#include <boost/predef/platform/windows_uwp.h>
+#include <boost/predef/version_number.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_PHONE`]
+
+[@https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide UWP]
+for Windows Phone development.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+    defined(WINAPI_FAMILY_PHONE_APP) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
+#   undef BOOST_PLAT_WINDOWS_PHONE
+#   define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_PHONE
+#   define BOOST_PLAT_WINDOWS_PHONE_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_PHONE_NAME "Windows Phone"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_PHONE,BOOST_PLAT_WINDOWS_PHONE_NAME)
diff --git a/include/boost/predef/platform/windows_runtime.h b/include/boost/predef/platform/windows_runtime.h
new file mode 100644
index 0000000..e7978d7
--- /dev/null
+++ b/include/boost/predef/platform/windows_runtime.h
@@ -0,0 +1,53 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_RUNTIME_H
+#define BOOST_PREDEF_PLAT_WINDOWS_RUNTIME_H
+
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+#include <boost/predef/platform/windows_phone.h>
+#include <boost/predef/platform/windows_store.h>
+#include <boost/predef/version_number.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_RUNTIME`]
+
+Deprecated.
+
+[@https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide UWP]
+for Windows Phone or Store development.  This does not align to the existing development model for
+UWP and is deprecated.  Use one of the other `BOOST_PLAT_WINDOWS_*`definitions instead.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`BOOST_PLAT_WINDOWS_PHONE`] [__predef_detection__]]
+    [[`BOOST_PLAT_WINDOWS_STORE`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+    (BOOST_PLAT_WINDOWS_STORE || BOOST_PLAT_WINDOWS_PHONE)
+#   undef BOOST_PLAT_WINDOWS_RUNTIME
+#   define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_RUNTIME
+#   define BOOST_PLAT_WINDOWS_RUNTIME_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_RUNTIME_NAME "Windows Runtime"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_RUNTIME,BOOST_PLAT_WINDOWS_RUNTIME_NAME)
diff --git a/include/boost/predef/platform/windows_server.h b/include/boost/predef/platform/windows_server.h
new file mode 100644
index 0000000..7bd629d
--- /dev/null
+++ b/include/boost/predef/platform/windows_server.h
@@ -0,0 +1,47 @@
+/*
+Copyright James E. King III, 2017
+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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_SERVER_H
+#define BOOST_PREDEF_PLAT_WINDOWS_SERVER_H
+
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+#include <boost/predef/platform/windows_uwp.h>
+#include <boost/predef/version_number.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_SERVER`]
+
+[@https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide UWP]
+for Windows Server development.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_SERVER`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_SERVER BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+    defined(WINAPI_FAMILY_SERVER) && WINAPI_FAMILY == WINAPI_FAMILY_SERVER
+#   undef BOOST_PLAT_WINDOWS_SERVER
+#   define BOOST_PLAT_WINDOWS_SERVER BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_SERVER
+#   define BOOST_PLAT_WINDOWS_SERVER_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_SERVER_NAME "Windows Server"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_SERVER,BOOST_PLAT_WINDOWS_SERVER_NAME)
diff --git a/include/boost/predef/platform/windows_store.h b/include/boost/predef/platform/windows_store.h
new file mode 100644
index 0000000..3a3fd8e
--- /dev/null
+++ b/include/boost/predef/platform/windows_store.h
@@ -0,0 +1,50 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_STORE_H
+#define BOOST_PREDEF_PLAT_WINDOWS_STORE_H
+
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+#include <boost/predef/platform/windows_uwp.h>
+#include <boost/predef/version_number.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_STORE`]
+
+[@https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide UWP]
+for Windows Store development.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_PC_APP`] [__predef_detection__]]
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_APP` (deprecated)] [__predef_detection__]]
+]
+ */
+
+#define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+    ((defined(WINAPI_FAMILY_PC_APP) && WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) || \
+     (defined(WINAPI_FAMILY_APP)    && WINAPI_FAMILY == WINAPI_FAMILY_APP))
+#   undef BOOST_PLAT_WINDOWS_STORE
+#   define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_STORE
+#   define BOOST_PLAT_WINDOWS_STORE_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_STORE_NAME "Windows Store"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_STORE,BOOST_PLAT_WINDOWS_STORE_NAME)
diff --git a/include/boost/predef/platform/windows_system.h b/include/boost/predef/platform/windows_system.h
new file mode 100644
index 0000000..92f424f
--- /dev/null
+++ b/include/boost/predef/platform/windows_system.h
@@ -0,0 +1,47 @@
+/*
+Copyright James E. King III, 2017
+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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_SYSTEM_H
+#define BOOST_PREDEF_PLAT_WINDOWS_SYSTEM_H
+
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+#include <boost/predef/platform/windows_uwp.h>
+#include <boost/predef/version_number.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_SYSTEM`]
+
+[@https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide UWP]
+for Windows System development.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_SYSTEM`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_SYSTEM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+    defined(WINAPI_FAMILY_SYSTEM) && WINAPI_FAMILY == WINAPI_FAMILY_SYSTEM
+#   undef BOOST_PLAT_WINDOWS_SYSTEM
+#   define BOOST_PLAT_WINDOWS_SYSTEM BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_SYSTEM
+#   define BOOST_PLAT_WINDOWS_SYSTEM_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_SYSTEM_NAME "Windows Drivers and Tools"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_SYSTEM,BOOST_PLAT_WINDOWS_SYSTEM_NAME)
diff --git a/include/boost/predef/platform/windows_uwp.h b/include/boost/predef/platform/windows_uwp.h
new file mode 100644
index 0000000..e4c6647
--- /dev/null
+++ b/include/boost/predef/platform/windows_uwp.h
@@ -0,0 +1,60 @@
+/*
+Copyright James E. King III, 2017
+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)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_UWP_H
+#define BOOST_PREDEF_PLAT_WINDOWS_UWP_H
+
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+#include <boost/predef/version_number.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_UWP`]
+
+[@http://docs.microsoft.com/windows/uwp/ Universal Windows Platform]
+is available if the current development environment is capable of targeting 
+UWP development.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MINGW64_VERSION_MAJOR` from `_mingw.h`] [`>= 3`]]
+    [[`VER_PRODUCTBUILD` from `ntverp.h`] [`>= 9200`]]
+]
+*/
+
+#define BOOST_PLAT_WINDOWS_UWP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_PLAT_WINDOWS_SDK_VERSION BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS
+//  MinGW (32-bit) has no ntverp.h header
+#if !defined(__MINGW32__)
+#   include <ntverp.h>
+#   undef BOOST_PLAT_WINDOWS_SDK_VERSION
+#   define BOOST_PLAT_WINDOWS_SDK_VERSION BOOST_VERSION_NUMBER(0, 0, VER_PRODUCTBUILD)
+#endif
+
+// 9200 is Windows SDK 8.0 from ntverp.h which introduced family support
+#if ((BOOST_PLAT_WINDOWS_SDK_VERSION >= BOOST_VERSION_NUMBER(0, 0, 9200)) || \
+     (defined(__MINGW64__) && __MINGW64_VERSION_MAJOR >= 3))
+#   undef BOOST_PLAT_WINDOWS_UWP
+#   define BOOST_PLAT_WINDOWS_UWP BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+#endif
+
+#if BOOST_PLAT_WINDOWS_UWP
+#   define BOOST_PLAT_WINDOWS_UWP_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#   include <winapifamily.h>    // Windows SDK
+#endif
+
+#define BOOST_PLAT_WINDOWS_UWP_NAME "Universal Windows Platform"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_UWP, BOOST_PLAT_WINDOWS_UWP_NAME)
diff --git a/include/boost/predef/version.h b/include/boost/predef/version.h
new file mode 100644
index 0000000..960292f
--- /dev/null
+++ b/include/boost/predef/version.h
@@ -0,0 +1,15 @@
+/*
+Copyright Rene Rivera 2015-2016
+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)
+*/
+
+#ifndef BOOST_PREDEF_VERSION_H
+#define BOOST_PREDEF_VERSION_H
+
+#include <boost/predef/version_number.h>
+
+#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,8,0)
+
+#endif
diff --git a/include/boost/predef/version_number.h b/include/boost/predef/version_number.h
new file mode 100644
index 0000000..4494270
--- /dev/null
+++ b/include/boost/predef/version_number.h
@@ -0,0 +1,72 @@
+/*
+Copyright Rene Rivera 2005-2016
+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)
+*/
+
+#ifndef BOOST_PREDEF_VERSION_NUMBER_H
+#define BOOST_PREDEF_VERSION_NUMBER_H
+
+/*`
+[heading `BOOST_VERSION_NUMBER`]
+
+``
+BOOST_VERSION_NUMBER(major,minor,patch)
+``
+
+Defines standard version numbers, with these properties:
+
+* Decimal base whole numbers in the range \[0,1000000000).
+  The number range is designed to allow for a (2,2,5) triplet.
+  Which fits within a 32 bit value.
+* The `major` number can be in the \[0,99\] range.
+* The `minor` number can be in the \[0,99\] range.
+* The `patch` number can be in the \[0,99999\] range.
+* Values can be specified in any base. As the defined value
+  is an constant expression.
+* Value can be directly used in both preprocessor and compiler
+  expressions for comparison to other similarly defined values.
+* The implementation enforces the individual ranges for the
+  major, minor, and patch numbers. And values over the ranges
+  are truncated (modulo).
+
+*/
+#define BOOST_VERSION_NUMBER(major,minor,patch) \
+    ( (((major)%100)*10000000) + (((minor)%100)*100000) + ((patch)%100000) )
+
+#define BOOST_VERSION_NUMBER_MAX \
+    BOOST_VERSION_NUMBER(99,99,99999)
+
+#define BOOST_VERSION_NUMBER_ZERO \
+    BOOST_VERSION_NUMBER(0,0,0)
+
+#define BOOST_VERSION_NUMBER_MIN \
+    BOOST_VERSION_NUMBER(0,0,1)
+
+#define BOOST_VERSION_NUMBER_AVAILABLE \
+    BOOST_VERSION_NUMBER_MIN
+
+#define BOOST_VERSION_NUMBER_NOT_AVAILABLE \
+    BOOST_VERSION_NUMBER_ZERO
+
+/*`
+``
+BOOST_VERSION_NUMBER_MAJOR(N), BOOST_VERSION_NUMBER_MINOR(N), BOOST_VERSION_NUMBER_PATCH(N)
+``
+
+The macros extract the major, minor, and patch portion from a well formed
+version number resulting in a preprocessor expression in the range of
+\[0,99\] or \[0,99999\] for the major and minor, or patch numbers
+respectively.
+*/
+#define BOOST_VERSION_NUMBER_MAJOR(N) \
+    ( ((N)/10000000)%100 )
+
+#define BOOST_VERSION_NUMBER_MINOR(N) \
+    ( ((N)/100000)%100 )
+
+#define BOOST_VERSION_NUMBER_PATCH(N) \
+    ( (N)%100000 )
+
+#endif
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..f99afa5
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=../../doc/html/predef.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="../../doc/html/predef.html">../../doc/html/predef.html</a>
+<p>Copyright&nbsp;Rene Rivera 2013-2014</p>
+<p>Distributed under the Boost Software License, Version 1.0. (See accompanying file
+<a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at
+<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>).
+</p>
+</body>
+</html>
diff --git a/meta/libraries.json b/meta/libraries.json
new file mode 100644
index 0000000..d7e326c
--- /dev/null
+++ b/meta/libraries.json
@@ -0,0 +1,14 @@
+{
+    "key": "predef",
+    "name": "Predef",
+    "authors": [
+        "Rene Rivera"
+    ],
+    "description": "This library defines a set of compiler, architecture, operating system, library, and other version numbers from the information it can gather of C, C++, Objective C, and Objective C++ predefined macros or those defined in generally available headers.",
+    "category": [
+        "Miscellaneous"
+    ],
+    "maintainers": [
+        "Rene Rivera <grafikrobot -at- gmail.com>"
+    ]
+}
diff --git a/test/.gitignore b/test/.gitignore
new file mode 100644
index 0000000..69d0b50
--- /dev/null
+++ b/test/.gitignore
@@ -0,0 +1,3 @@
+/defs-clang.txt
+/defs-gcc.txt
+/bin/
diff --git a/test/build.jam b/test/build.jam
new file mode 100644
index 0000000..223950e
--- /dev/null
+++ b/test/build.jam
@@ -0,0 +1,80 @@
+#!/usr/bin/env b2 -a --verbose-test
+# Copyright Rene Rivera 2011-2016
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import ../check/predef : require check : predef-require predef-check ;
+
+local predef-include-root ;
+local predef-dependency ;
+
+local modular-predef-h = [ glob $(BOOST_PREDEF_ROOT)/include/boost/predef.h ] ;
+local BOOST_RELEASE_LAYOUT ;
+if ! $(modular-predef-h)
+{
+    BOOST_RELEASE_LAYOUT = yes ;
+}
+
+# When using modular layout, header files are not present in $root/boost
+# unlink links are created, therefore instead of direct dependency on
+# a header, we need to use dependency on metatarget.
+if $(BOOST_RELEASE_LAYOUT)
+{
+   predef-dependency = $(predef-include-root)/boost/predef.h ;
+}
+else if $(BOOST_PREDEF_ROOT)
+{
+    predef-include-root = $(BOOST_PREDEF_ROOT)/include ;
+    predef-dependency = $(predef-include-root)/boost/predef.h ;
+}
+else if $(BOOST_MODULARLAYOUT)
+{
+    predef-include-root = $(BOOST_ROOT) ;
+    predef-dependency = /boost//predef-headers ;
+}
+else
+{
+   predef-dependency = $(predef-include-root)/boost/predef.h ;
+}
+
+project predef-test
+    :   requirements
+        <include>$(predef-include-root)
+        # Add explicit dependency since we don't have header scanner for
+        # .m and .mm files.
+        <dependency>$(predef-dependency)
+    ;
+
+using testing ;
+
+test-suite predef :
+    [ run info_as_cpp.cpp : : : <test-info>always_show_run_output ]
+    [ run info_as_c.c : : : <test-info>always_show_run_output ]
+    [ run info_as_objcpp.mm : : : <test-info>always_show_run_output ]
+    [ run info_as_objc.m : : : <test-info>always_show_run_output ]
+    [ run version.cpp ]
+    [ run make.cpp ]
+    [ compile macos_endian.c : [ predef-require "BOOST_OS_MACOS" : cpp ] ]
+    [ compile macos_vs_bsd.c : [ predef-require "BOOST_OS_MACOS" : cpp ] ]
+    [ run check_value.cpp : : : <test-info>always_show_run_output
+        [ predef-check "BOOST_COMP_CLANG > 0.0.0" "BOOST_OS_LINUX == 0" : : <cxxflags>-DCHECK_VALUE=true ] ]
+    [ run workaround.cpp ]
+    [ compile workaround_strict_config.cpp ]
+    [ run tested_at.cpp ]
+    [ compile-fail tested_at_outdated.cpp : <test-info>always_show_run_output ]
+	[ compile platform_windows.cpp ]
+    ;
+
+# Minimal testing done for predef for CI. Since
+# we don't have many we can just do all of them.
+alias minimal : predef ;
+
+# Full testing target for regular regression tests.
+alias full : predef ;
+
+# Extra's target. Nothing for Predef.
+alias extra ;
+
+explicit minimal ;
+explicit extra ;
diff --git a/test/check_value.cpp b/test/check_value.cpp
new file mode 100644
index 0000000..30ae806
--- /dev/null
+++ b/test/check_value.cpp
@@ -0,0 +1,26 @@
+/*
+Copyright Rene Rivera 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)
+*/
+
+/*
+ * Simple program that just prints out the externally
+ * defined CHECK_VALUE def. It's used to test the check
+ * program and the related BB support.
+ */
+
+#include <boost/predef.h>
+#include <iostream>
+#include <string>
+
+#ifndef CHECK_VALUE
+#define CHECK_VALUE "undefined"
+#endif
+
+int main()
+{
+	std::cout << "CHECK_VALUE == " << CHECK_VALUE << "\n" ;
+	return 0;
+}
diff --git a/test/info_as_c.c b/test/info_as_c.c
new file mode 100644
index 0000000..44f7e8d
--- /dev/null
+++ b/test/info_as_c.c
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_info.h"
diff --git a/test/info_as_cpp.cpp b/test/info_as_cpp.cpp
new file mode 100644
index 0000000..44f7e8d
--- /dev/null
+++ b/test/info_as_cpp.cpp
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_info.h"
diff --git a/test/info_as_objc.m b/test/info_as_objc.m
new file mode 100644
index 0000000..44f7e8d
--- /dev/null
+++ b/test/info_as_objc.m
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_info.h"
diff --git a/test/info_as_objcpp.mm b/test/info_as_objcpp.mm
new file mode 100644
index 0000000..44f7e8d
--- /dev/null
+++ b/test/info_as_objcpp.mm
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_info.h"
diff --git a/test/macos_endian.c b/test/macos_endian.c
new file mode 100644
index 0000000..7f29f90
--- /dev/null
+++ b/test/macos_endian.c
@@ -0,0 +1,21 @@
+/*
+Copyright Rene Rivera 2013
+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)
+*/
+
+/*
+ * OSX can define the BSD symbols if sys/param.h is included
+ * before detection. This causes the endian detection to misfire
+ * as both MACOS and BSD are "detected" (currently). This just
+ * tests that the sys/param.h include can be included before
+ * endian detection and still have it work correctly.
+ */
+
+#if defined(__APPLE__)
+#   include <sys/param.h>
+#   include <boost/predef/os/bsd.h>
+#   include <boost/predef/os/macos.h>
+#   include <boost/predef/other/endian.h>
+#endif
diff --git a/test/macos_vs_bsd.c b/test/macos_vs_bsd.c
new file mode 100644
index 0000000..173b5a4
--- /dev/null
+++ b/test/macos_vs_bsd.c
@@ -0,0 +1,19 @@
+/*
+Copyright Rene Rivera 2013
+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)
+*/
+
+/*
+ * OSX can masquerade as BSD when sys/param.h is previously included.
+ * So we test that we only detect OSX in this combination.
+ */
+#if defined(__APPLE__)
+#   include <sys/param.h>
+#   include <boost/predef/os/bsd.h>
+#   include <boost/predef/os/macos.h>
+#   if !BOOST_OS_MACOS || BOOST_OS_BSD
+#       error "BOOST_OS_MACOS not detected and/or BOOST_OS_BSD mis-detected."
+#   endif
+#endif
diff --git a/test/make.cpp b/test/make.cpp
new file mode 100644
index 0000000..6b84624
--- /dev/null
+++ b/test/make.cpp
@@ -0,0 +1,94 @@
+/*
+Copyright Rene Rivera 2011-2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <exception>
+#include <vector>
+#include <string>
+#include <iostream>
+
+namespace
+{
+    struct test_info
+    {
+        std::string value;
+        bool passed;
+
+        test_info(std::string const & v, bool p) : value(v), passed(p) {}
+        test_info(test_info const & o) : value(o.value), passed(o.passed) {}
+    };
+
+    std::vector<test_info> test_results;
+}
+
+#define PREDEF_CHECK(X) test_results.push_back(test_info(#X,(X)))
+
+void test_BOOST_VERSION_NUMBER()
+{
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VRP(0xFFF) == BOOST_VERSION_NUMBER(0xF,0xF,0xF));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VVRP(0xFFFF) == BOOST_VERSION_NUMBER(0xFF,0xF,0xF));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VRPP(0xFFFF) == BOOST_VERSION_NUMBER(0xF,0xF,0xFF));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VVRR(0xFFFF) == BOOST_VERSION_NUMBER(0xFF,0xFF,0x0));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VRRPPPP(0xFFFFFFF) == BOOST_VERSION_NUMBER(0xF,0xFF,0xFFFF));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VVRRP(0xFFFFF) == BOOST_VERSION_NUMBER(0xFF,0xFF,0xF));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VRRPP000(0xFFFFF000) == BOOST_VERSION_NUMBER(0xF,0xFF,0xFF));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_0X_VVRRPP(0xFFFFFF) == BOOST_VERSION_NUMBER(0xFF,0xFF,0xFF));
+
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VR0(980) == BOOST_VERSION_NUMBER(9,8,0));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRP(999) == BOOST_VERSION_NUMBER(9,9,9));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VPPP(9999) == BOOST_VERSION_NUMBER(9,0,999));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRRPP(999999) == BOOST_VERSION_NUMBER(99,99,99));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR(9999) == BOOST_VERSION_NUMBER(99,99,0));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRRP(98765) == BOOST_VERSION_NUMBER(98,76,5));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRPP(9999) == BOOST_VERSION_NUMBER(9,9,99));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRRPP(99999) == BOOST_VERSION_NUMBER(9,99,99));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRPPPP(460002) == BOOST_VERSION_NUMBER(4,6,2));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRPPPP(491000) == BOOST_VERSION_NUMBER(4,9,1000));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRP000(999000) == BOOST_VERSION_NUMBER(9,9,9));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRR000(999000) == BOOST_VERSION_NUMBER(9,99,0));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR00PP00(2199009900u) == BOOST_VERSION_NUMBER(21,99,99));
+    /* PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR00PP00(9999009900ull) == BOOST_VERSION_NUMBER(99,99,99)); */
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR0PP00(999909900) == BOOST_VERSION_NUMBER(99,99,99));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VV00(9900) == BOOST_VERSION_NUMBER(99,00,00));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR0PPPP(999909999) == BOOST_VERSION_NUMBER(99,99,9999));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRR(999) == BOOST_VERSION_NUMBER(9,99,00));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRRPPP(903122) == BOOST_VERSION_NUMBER(9,3,122));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRRPPP(1101002) == BOOST_VERSION_NUMBER(11,1,2));
+
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_DATE(1971,1,1) == BOOST_VERSION_NUMBER(1,1,1));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_YYYYMMDD(19700101) == BOOST_VERSION_NUMBER(0,1,1));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_YYYYMMDD(19710101) == BOOST_VERSION_NUMBER(1,1,1));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_YYYYMMDD(20691231) == BOOST_VERSION_NUMBER(99,12,31));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_YYYYMM(197001) == BOOST_VERSION_NUMBER(0,1,1));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_YYYYMM(197101) == BOOST_VERSION_NUMBER(1,1,1));
+    PREDEF_CHECK(BOOST_PREDEF_MAKE_YYYYMM(206912) == BOOST_VERSION_NUMBER(99,12,1));
+}
+
+int main()
+{
+    test_BOOST_VERSION_NUMBER();
+
+    unsigned fail_count = 0;
+    std::vector<test_info>::iterator i = test_results.begin();
+    std::vector<test_info>::iterator e = test_results.end();
+    for (; i != e; ++i)
+    {
+        std::cout
+            << (i->passed ? "[passed]" : "[failed]")
+            << " " << i->value
+            << std::endl;
+        fail_count += i->passed ? 0 : 1;
+    }
+    std::cout
+        << std::endl
+        << "TOTAL: "
+        << "passed " << (test_results.size()-fail_count) << ", "
+        << "failed " << (fail_count) << ", "
+        << "of " << (test_results.size())
+        << std::endl;
+    return fail_count;
+}
diff --git a/test/platform_windows.cpp b/test/platform_windows.cpp
new file mode 100644
index 0000000..53f3ecc
--- /dev/null
+++ b/test/platform_windows.cpp
@@ -0,0 +1,177 @@
+/*
+Copyright James E. King, III - 2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#include <boost/predef/platform.h>
+
+//
+// This file is used to verify the BOOST_PLAT_WINDOWS_* logic.
+//
+// To exercise all of the combinations the CI build needs many 
+// jobs where it defines all the different possible WINAPI_FAMILY
+// values on all supported platforms.
+//
+
+//
+// UWP is available on Windows SDK 8.0 or later, or on MinGW-w64 major release 3 or later
+//
+#if (defined(__MINGW64__) && (__MINGW64_VERSION_MAJOR >= 3)) || (BOOST_PLAT_WINDOWS_SDK_VERSION >= 9200)
+#if !BOOST_PLAT_WINDOWS_UWP
+#error "BOOST_PLAT_WINDOWS_UWP should be available"
+#endif
+#else
+#if BOOST_PLAT_WINDOWS_UWP
+#error "BOOST_PLAT_WINDOWS_UWP should not be available"
+#endif
+#endif
+
+#if !BOOST_PLAT_WINDOWS_UWP
+
+//
+// If BOOST_PLAT_WINDOWS_UWP is not available, none of the other BOOST_PLAT_WINDOWS_* are either
+// except for BOOST_PLAT_WINDOWS_DESKTOP which is available for backwards compatibility.
+//
+
+#if BOOST_OS_WINDOWS && !BOOST_PLAT_WINDOWS_DESKTOP
+#error "BOOST_PLAT_WINDOWS_DESKTOP should be available"
+#endif
+#if BOOST_PLAT_WINDOWS_PHONE
+#error "BOOST_PLAT_WINDOWS_PHONE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_RUNTIME /* deprecated */
+#error "BOOST_PLAT_WINDOWS_RUNTIME should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SERVER
+#error "BOOST_PLAT_WINDOWS_SERVER should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_STORE
+#error "BOOST_PLAT_WINDOWS_STORE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SYSTEM
+#error "BOOST_PLAT_WINDOWS_SYSTEM should not be available"
+#endif
+
+#else // !BOOST_PLAT_WINDOWS_UWP
+
+//
+// If BOOST_PLAT_WINDOWS_UWP is available, and the SDK supports a particular family,
+// and if WINAPI_FAMILY is set to it, then it and only it should be available.
+//
+
+#if !defined(WINAPI_FAMILY)
+#error "windows_uwp.h should have included <winapifamily.h> which should have defined supported families"
+#endif
+
+#if WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP
+#if !BOOST_PLAT_WINDOWS_DESKTOP
+#error "BOOST_PLAT_WINDOWS_DESKTOP should be available"
+#endif
+#if BOOST_PLAT_WINDOWS_PHONE
+#error "BOOST_PLAT_WINDOWS_PHONE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_RUNTIME /* deprecated */
+#error "BOOST_PLAT_WINDOWS_RUNTIME should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SERVER
+#error "BOOST_PLAT_WINDOWS_SERVER should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_STORE
+#error "BOOST_PLAT_WINDOWS_STORE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SYSTEM
+#error "BOOST_PLAT_WINDOWS_SYSTEM should not be available"
+#endif
+#endif
+
+#if defined(WINAPI_FAMILY_PHONE_APP) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
+#if BOOST_PLAT_WINDOWS_DESKTOP
+#error "BOOST_PLAT_WINDOWS_DESKTOP should not be available"
+#endif
+#if !BOOST_PLAT_WINDOWS_PHONE
+#error "BOOST_PLAT_WINDOWS_PHONE should be available"
+#endif
+#if !BOOST_PLAT_WINDOWS_RUNTIME /* deprecated */
+#error "BOOST_PLAT_WINDOWS_RUNTIME should be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SERVER
+#error "BOOST_PLAT_WINDOWS_SERVER should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_STORE
+#error "BOOST_PLAT_WINDOWS_STORE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SYSTEM
+#error "BOOST_PLAT_WINDOWS_SYSTEM should not be available"
+#endif
+#endif
+
+#if defined(WINAPI_FAMILY_SERVER_APP) && WINAPI_FAMILY == WINAPI_FAMILY_SERVER_APP
+#if BOOST_PLAT_WINDOWS_DESKTOP
+#error "BOOST_PLAT_WINDOWS_DESKTOP should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_PHONE
+#error "BOOST_PLAT_WINDOWS_PHONE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_RUNTIME /* deprecated */
+#error "BOOST_PLAT_WINDOWS_RUNTIME should not be available"
+#endif
+#if !BOOST_PLAT_WINDOWS_SERVER
+#error "BOOST_PLAT_WINDOWS_SERVER should be available"
+#endif
+#if BOOST_PLAT_WINDOWS_STORE
+#error "BOOST_PLAT_WINDOWS_STORE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SYSTEM
+#error "BOOST_PLAT_WINDOWS_SYSTEM should not be available"
+#endif
+#endif
+
+// Store is WINAPI_FAMILY_APP in MinGW-w64 and in Windows SDK 8.0
+// then in Windows SDK 8.1 it was deprecated in favor of WINAPI_FAMILY_PC_APP
+
+#if ((defined(WINAPI_FAMILY_PC_APP) && WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) || \
+     (defined(WINAPI_FAMILY_APP) && WINAPI_FAMILY == WINAPI_FAMILY_APP))
+#if BOOST_PLAT_WINDOWS_DESKTOP
+#error "BOOST_PLAT_WINDOWS_DESKTOP should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_PHONE
+#error "BOOST_PLAT_WINDOWS_PHONE should not be available"
+#endif
+#if !BOOST_PLAT_WINDOWS_RUNTIME /* deprecated */
+#error "BOOST_PLAT_WINDOWS_RUNTIME should be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SERVER
+#error "BOOST_PLAT_WINDOWS_SERVER should not be available"
+#endif
+#if !BOOST_PLAT_WINDOWS_STORE
+#error "BOOST_PLAT_WINDOWS_STORE should be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SYSTEM
+#error "BOOST_PLAT_WINDOWS_SYSTEM should not be available"
+#endif
+#endif
+
+#if defined(WINAPI_FAMILY_SYSTEM_APP) && WINAPI_FAMILY == WINAPI_FAMILY_SYSTEM_APP
+#if BOOST_PLAT_WINDOWS_DESKTOP
+#error "BOOST_PLAT_WINDOWS_DESKTOP should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_PHONE
+#error "BOOST_PLAT_WINDOWS_PHONE should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_RUNTIME /* deprecated */
+#error "BOOST_PLAT_WINDOWS_RUNTIME should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_SERVER
+#error "BOOST_PLAT_WINDOWS_SERVER should not be available"
+#endif
+#if BOOST_PLAT_WINDOWS_STORE
+#error "BOOST_PLAT_WINDOWS_STORE should not be available"
+#endif
+#if !BOOST_PLAT_WINDOWS_SYSTEM
+#error "BOOST_PLAT_WINDOWS_SYSTEM should be available"
+#endif
+#endif
+
+#endif // !BOOST_PLAT_WINDOWS_UWP
diff --git a/test/predef_info.h b/test/predef_info.h
new file mode 100644
index 0000000..213d94b
--- /dev/null
+++ b/test/predef_info.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include <boost/predef/detail/test_def.h>
+
+int main()
+{
+    unsigned x = 0;
+    create_predef_entries();
+    qsort(generated_predef_info,generated_predef_info_count,
+        sizeof(predef_info),predef_info_compare);
+    /*
+    for (x = 0; x < generated_predef_info_count; ++x)
+    {
+        printf("%s: %d\n", generated_predef_info[x].name, generated_predef_info[x].value);
+    }
+    */
+    puts("** Detected **");
+    for (x = 0; x < generated_predef_info_count; ++x)
+    {
+        if (generated_predef_info[x].value > 0)
+            printf("%s = %u (%u,%u,%u) | %s\n",
+                generated_predef_info[x].name,
+                generated_predef_info[x].value,
+                (generated_predef_info[x].value/10000000)%100,
+                (generated_predef_info[x].value/100000)%100,
+                (generated_predef_info[x].value)%100000,
+                generated_predef_info[x].description);
+    }
+    puts("** Not Detected **");
+    for (x = 0; x < generated_predef_info_count; ++x)
+    {
+        if (generated_predef_info[x].value == 0)
+            printf("%s = %u | %s\n",
+                generated_predef_info[x].name,
+                generated_predef_info[x].value,
+                generated_predef_info[x].description);
+    }
+    if (generated_predef_info_count > 0)
+        return 0;
+    else
+        return 1;
+}
diff --git a/test/tested_at.cpp b/test/tested_at.cpp
new file mode 100644
index 0000000..2c4816e
--- /dev/null
+++ b/test/tested_at.cpp
@@ -0,0 +1,62 @@
+/*
+Copyright Rene Rivera 2011-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/version_number.h>
+#include <boost/predef/other/workaround.h>
+#include <exception>
+#include <vector>
+#include <string>
+#include <iostream>
+
+namespace
+{
+    struct test_info
+    {
+        std::string value;
+        bool passed;
+
+        test_info(std::string const & v, bool p) : value(v), passed(p) {}
+        test_info(test_info const & o) : value(o.value), passed(o.passed) {}
+    };
+
+    std::vector<test_info> test_results;
+}
+
+#define PREDEF_CHECK(X) test_results.push_back(test_info(#X,(X)))
+
+void test_BOOST_PREDEF_TESTED_AT()
+{
+    PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(15,15,15),0xF,0xF,0xF));
+    PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(1,0,0),1,0,0));
+    PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(0,9,0),1,0,0));
+    PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(2,0,0),1,0,0));
+    PREDEF_CHECK(!BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER_NOT_AVAILABLE,1,0,0));
+}
+
+int main()
+{
+    test_BOOST_PREDEF_TESTED_AT();
+
+    unsigned fail_count = 0;
+    std::vector<test_info>::iterator i = test_results.begin();
+    std::vector<test_info>::iterator e = test_results.end();
+    for (; i != e; ++i)
+    {
+        std::cout
+            << (i->passed ? "[passed]" : "[failed]")
+            << " " << i->value
+            << std::endl;
+        fail_count += i->passed ? 0 : 1;
+    }
+    std::cout
+        << std::endl
+        << "TOTAL: "
+        << "passed " << (test_results.size()-fail_count) << ", "
+        << "failed " << (fail_count) << ", "
+        << "of " << (test_results.size())
+        << std::endl;
+    return fail_count;
+}
diff --git a/test/tested_at_outdated.cpp b/test/tested_at_outdated.cpp
new file mode 100644
index 0000000..534ebaf
--- /dev/null
+++ b/test/tested_at_outdated.cpp
@@ -0,0 +1,18 @@
+/*
+Copyright Rene Rivera 2011-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/version_number.h>
+#define BOOST_DETECT_OUTDATED_WORKAROUNDS
+#include <boost/predef/other/workaround.h>
+
+int main()
+{
+#if BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(2,0,0),1,0,0)
+    return 1;
+#else
+    return 0;
+#endif
+}
diff --git a/test/version.cpp b/test/version.cpp
new file mode 100644
index 0000000..68e724f
--- /dev/null
+++ b/test/version.cpp
@@ -0,0 +1,83 @@
+/*
+Copyright Rene Rivera 2011-2012
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/version_number.h>
+#include <exception>
+#include <vector>
+#include <string>
+#include <iostream>
+
+namespace
+{
+    struct test_info
+    {
+        std::string value;
+        bool passed;
+
+        test_info(std::string const & v, bool p) : value(v), passed(p) {}
+        test_info(test_info const & o) : value(o.value), passed(o.passed) {}
+    };
+
+    std::vector<test_info> test_results;
+}
+
+#define PREDEF_CHECK(X) test_results.push_back(test_info(#X,(X)))
+
+void test_BOOST_VERSION_NUMBER()
+{
+    PREDEF_CHECK(BOOST_VERSION_NUMBER(0,0,1) == 1L);
+    PREDEF_CHECK(BOOST_VERSION_NUMBER(99,99,99999) == 999999999L);
+    PREDEF_CHECK(BOOST_VERSION_NUMBER(299UL,99UL,99999UL) != 2999999999UL);
+    PREDEF_CHECK(BOOST_VERSION_NUMBER(100,99,99999) != 1009999999L);
+    PREDEF_CHECK(BOOST_VERSION_NUMBER(100,99,99999) == 9999999L);
+    PREDEF_CHECK(BOOST_VERSION_NUMBER(100,100,100000) == 0L);
+
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(0,0,0)) == 0);
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(3,3,3)) == 3);
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(99,99,99999)) == 99);
+
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(0,0,0)) == 0);
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(3,3,3)) == 3);
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(99,99,99999)) == 99);
+
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(0,0,0)) == 0);
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(3,3,3)) == 3);
+    PREDEF_CHECK(
+        BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(99,99,99999)) == 99999);
+}
+
+int main()
+{
+    test_BOOST_VERSION_NUMBER();
+
+    unsigned fail_count = 0;
+    std::vector<test_info>::iterator i = test_results.begin();
+    std::vector<test_info>::iterator e = test_results.end();
+    for (; i != e; ++i)
+    {
+        std::cout
+            << (i->passed ? "[passed]" : "[failed]")
+            << " " << i->value
+            << std::endl;
+        fail_count += i->passed ? 0 : 1;
+    }
+    std::cout
+        << std::endl
+        << "TOTAL: "
+        << "passed " << (test_results.size()-fail_count) << ", "
+        << "failed " << (fail_count) << ", "
+        << "of " << (test_results.size())
+        << std::endl;
+    return fail_count;
+}
diff --git a/test/workaround.cpp b/test/workaround.cpp
new file mode 100644
index 0000000..368daea
--- /dev/null
+++ b/test/workaround.cpp
@@ -0,0 +1,62 @@
+/*
+Copyright Rene Rivera 2011-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/version_number.h>
+#include <boost/predef/other/workaround.h>
+#include <exception>
+#include <vector>
+#include <string>
+#include <iostream>
+
+namespace
+{
+    struct test_info
+    {
+        std::string value;
+        bool passed;
+
+        test_info(std::string const & v, bool p) : value(v), passed(p) {}
+        test_info(test_info const & o) : value(o.value), passed(o.passed) {}
+    };
+
+    std::vector<test_info> test_results;
+}
+
+#define PREDEF_CHECK(X) test_results.push_back(test_info(#X,(X)))
+
+void test_BOOST_PREDEF_WORKAROUND()
+{
+    PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER(15,15,15),==,0xF,0xF,0xF));
+    PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER(0,9,0),<,1,0,0));
+    PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER(0,9,0),!=,1,0,0));
+    PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER_MIN,<,1,0,0));
+    PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER_MIN,>,0,0,0));
+}
+
+int main()
+{
+    test_BOOST_PREDEF_WORKAROUND();
+
+    unsigned fail_count = 0;
+    std::vector<test_info>::iterator i = test_results.begin();
+    std::vector<test_info>::iterator e = test_results.end();
+    for (; i != e; ++i)
+    {
+        std::cout
+            << (i->passed ? "[passed]" : "[failed]")
+            << " " << i->value
+            << std::endl;
+        fail_count += i->passed ? 0 : 1;
+    }
+    std::cout
+        << std::endl
+        << "TOTAL: "
+        << "passed " << (test_results.size()-fail_count) << ", "
+        << "failed " << (fail_count) << ", "
+        << "of " << (test_results.size())
+        << std::endl;
+    return fail_count;
+}
diff --git a/test/workaround_strict_config.cpp b/test/workaround_strict_config.cpp
new file mode 100644
index 0000000..df7b176
--- /dev/null
+++ b/test/workaround_strict_config.cpp
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 2011-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/version_number.h>
+#define BOOST_STRICT_CONFIG
+#include <boost/predef/other/workaround.h>
+
+int main()
+{
+#if BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER_AVAILABLE,==,0,0,1)
+    fail();
+#endif
+    return 0;
+}
diff --git a/tools/check/build.jam b/tools/check/build.jam
new file mode 100644
index 0000000..1ce4f11
--- /dev/null
+++ b/tools/check/build.jam
@@ -0,0 +1,9 @@
+# Copyright Rene Rivera 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)
+
+exe predef_check_as_c : predef_check_as_c.c : <include>../include ;
+exe predef_check_as_cpp : predef_check_as_cpp.cpp : <include>../include ;
+exe predef_check_as_objc : predef_check_as_objc.m : <include>../include ;
+exe predef_check_as_objcpp : predef_check_as_objcpp.mm : <include>../include ;
diff --git a/tools/check/predef.jam b/tools/check/predef.jam
new file mode 100644
index 0000000..c037fb4
--- /dev/null
+++ b/tools/check/predef.jam
@@ -0,0 +1,202 @@
+# Copyright Rene Rivera 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)
+
+# Defines rules that provide requirements based on checking
+# conditions using Boost Predef definitions and version numbers.
+
+import modules ;
+import project ;
+import feature ;
+import string ;
+import toolset ;
+import modules ;
+import path ;
+import "class" : new ;
+import regex ;
+
+# Create a project for our targets.
+project.extension predef check ;
+
+# Feature to pass check expressions to check programs.
+feature.feature predef-expression : : free ;
+
+# Checks the expressions and when used evaluates to the true-properties
+# if the expressions are all true. Otherwise evaluates to the
+# false-properties.
+rule check ( expressions + : language ? : true-properties * : false-properties * )
+{
+    # Default to C++ on the check context.
+    language ?= cpp ;
+    
+    local project_target = [ project.target $(__name__) ] ;
+	project.push-current $(project_target) ;
+    local terms ;
+    local result ;
+    for expression in $(expressions)
+    {
+        if $(expression:L) in "and" "or"
+        {
+            terms += $(expression:L) ;
+        }
+        else
+        {
+            # Create the check run if we don't have one yet.
+            local key = [ MD5 "$(language)::$(expression)" ] ;
+            if ! ( $(key) in $(_checks_) )
+            {
+                _checks_ += $(key) ;
+                _message_(/check/predef//predef_check_cc_$(key)) = $(expression) ;
+                check_target $(language) $(key) : [ change_term_to_def $(expression) ] ;
+            }
+            
+            terms += /check/predef//predef_check_cc_$(key) ;
+        }
+    }
+    local instance = [ new check-expression-evaluator
+        $(terms) : $(true-properties) : $(false-properties) ] ;
+    result = <conditional>@$(instance).check ;
+    project.pop-current ;
+    return $(result) ;
+}
+
+# Checks the expressions and when used evaluates to <build>no
+# if the expressions are all false. Otherwise evaluates to the
+# nothing.
+rule require ( expressions + : language ? )
+{
+    return [ check $(expressions) : $(language) : : <build>no ] ;
+}
+
+#############################################################################
+
+.c.ext = c ;
+.cpp.ext = cpp ;
+.objc.ext = m ;
+.objcpp.ext = mm ;
+
+# Check targets. Each needs to be compiled for different languages
+# even though they are all the same source code.
+local rule check_target ( language key : requirements * )
+{
+    # Need to use absolute paths because we don't know the
+    # context of the invocation which affects where the paths
+    # originate from.
+    local predef_jam
+        = [ modules.binding $(__name__) ] ;
+    local source_path
+        = $(predef_jam:D)/predef_check_cc_as_$(language).$(.$(language).ext) ;
+    local include_path
+        = $(predef_jam:D)/../../include ;
+    obj predef_check_cc_$(key)
+        : $(source_path)
+        : <include>$(include_path) $(requirements) ;
+    explicit predef_check_cc_$(key) ;
+    return predef_check_cc_$(key) ;
+}
+
+local rule change_term_to_def ( term )
+{
+    local parts = [ regex.split $(term) " " ] ;
+    if $(parts[3])
+    {
+        local version_number = [ regex.split $(parts[3]) "[.]" ] ;
+        if ! $(version_number[3]) { version_number += "0" ; }
+        if ! $(version_number[2]) { version_number += "0" ; }
+        parts = $(parts[1-2]) BOOST_VERSION_NUMBER($(version_number:J=",")) ;
+    }
+    return <define>CHECK=\"$(parts:J=" ")\" ;
+}
+
+class check-expression-evaluator
+{
+    import configure ;
+    
+    rule __init__ ( expression + : true-properties * : false-properties * )
+    {
+        self.expression = $(expression) ;
+        self.true-properties = $(true-properties) ;
+        self.false-properties = $(false-properties) ;
+    }
+    
+    rule check ( properties * )
+    {
+        local to-eval ;
+        local tokens = "and" "or" ;
+        # Go through the expression and: eval the target values,
+        # and normalize to a full expression.
+        for local term in $(self.expression)
+        {
+            if ! ( $(term:L) in $(tokens) )
+            {
+                # A value is a target reference that will evan to "true"
+                # or "false".
+                if $(to-eval[-1]:L) && ! ( $(to-eval[-1]:L) in $(tokens) )
+                {
+                    # Default to "and" operation.
+                    to-eval += "and" ;
+                }
+                local message = [ modules.peek predef : _message_($(term)) ] ;
+                if [ configure.builds $(term) : $(properties) : $(message) ]
+                {
+                    to-eval += "true" ;
+                }
+                else
+                {
+                    to-eval += "false" ;
+                }
+            }
+            else
+            {
+                to-eval += $(term) ;
+            }
+        }
+        # Eval full the expression.
+        local eval-result = [ eval $(to-eval) ] ;
+        # And resolve true/false properties.
+        if $(eval-result) = "true"
+        {
+            return $(self.true-properties) ;
+        }
+        else
+        {
+            return $(self.false-properties) ;
+        }
+    }
+    
+    rule eval ( e * )
+    {
+        local r ;
+        if $(e[1]) && $(e[2]) && $(e[3])
+        {
+            if $(e[2]) = "and"
+            {
+                if $(e[1]) = "true" && $(e[3]) = "true"
+                {
+                    r = [ eval "true" $(e[4-]) ] ;
+                }
+                else
+                {
+                    r = [ eval "false" $(e[4-]) ] ;
+                }
+            }
+            else if $(e[2]) = "or"
+            {
+                if $(e[1]) = "true" || $(e[3]) = "true"
+                {
+                    r = [ eval "true" $(e[4-]) ] ;
+                }
+                else
+                {
+                    r = [ eval "false" $(e[4-]) ] ;
+                }
+            }
+        }
+        else
+        {
+            r = $(e[1]) ;
+        }
+        return $(r) ;
+    }
+}
diff --git a/tools/check/predef_check.h b/tools/check/predef_check.h
new file mode 100644
index 0000000..a6917c1
--- /dev/null
+++ b/tools/check/predef_check.h
@@ -0,0 +1,98 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include <boost/predef/detail/test_def.h>
+
+const char * str_token(const char ** str, const char * space)
+{
+    unsigned span;
+    char * token;
+    for (; **str != 0; *str += 1)
+    {
+        if (0 == strchr(space, **str))
+        {
+            break;
+        }
+    }
+    span = strcspn(*str, space);
+    token = (char *)malloc(span+1);
+    strncpy(token, *str, span);
+    token[span] = 0;
+    for (*str += span; **str != 0; *str += 1)
+    {
+        if (0 == strchr(space, **str))
+        {
+            break;
+        }
+    }
+    return token;
+}
+
+const char * whitespace = " ";
+const char * dot = ".";
+
+int main(int argc, const char ** argv)
+{
+    unsigned x = 0;
+    int argi = 1;
+    create_predef_entries();
+#if 0
+    qsort(generated_predef_info,generated_predef_info_count,
+        sizeof(predef_info),predef_info_compare);
+    for (x = 0; x < generated_predef_info_count; ++x)
+    {
+        printf("%s: %d\n", generated_predef_info[x].name, generated_predef_info[x].value);
+    }
+#endif
+    int result = -1;
+    for (argi = 1; argi < argc; ++argi)
+    {
+        const char * exp = argv[argi];
+        const char * exp_name = str_token(&exp, whitespace);
+        const char * exp_op = str_token(&exp, whitespace);
+        const char * exp_val = str_token(&exp, whitespace);
+        unsigned exp_version = 0;
+        if (*exp_val != 0)
+        {
+            exp = exp_val;
+            const char * exp_val_a = str_token(&exp, dot);
+            const char * exp_val_b = str_token(&exp, dot);
+            const char * exp_val_c = str_token(&exp, dot);
+            exp_version = BOOST_VERSION_NUMBER(atoi(exp_val_a), atoi(exp_val_b),atoi(exp_val_c));
+        }
+        for (x = 0; x < generated_predef_info_count; ++x)
+        {
+            if (*exp_op == 0 &&
+                generated_predef_info[x].value > 0 &&
+                strcmp(exp_name, generated_predef_info[x].name) == 0)
+            {
+                /* Expression of the form "BOOST_x_yy" is true. */
+                result = 0;
+                break;
+            }
+            else if (*exp_op == 0 &&
+                generated_predef_info[x].value == 0 &&
+                strcmp(exp_name, generated_predef_info[x].name) == 0)
+            {
+                /* Expression of the form "BOOST_x_yy" is false. */
+                return argi;
+            }
+            else if (*exp_op != 0 && *exp_val != 0 &&
+                strcmp(exp_name, generated_predef_info[x].name) == 0)
+            {
+                /* Expression of the form "BOOST_x_yy op val". */
+                result = 0;
+                if (0 == strcmp(">",exp_op) && !(generated_predef_info[x].value > exp_version)) return argi;
+                if (0 == strcmp("<",exp_op) && !(generated_predef_info[x].value < exp_version)) return argi;
+                if (0 == strcmp(">=",exp_op) && !(generated_predef_info[x].value >= exp_version)) return argi;
+                if (0 == strcmp("<=",exp_op) && !(generated_predef_info[x].value <= exp_version)) return argi;
+                if (0 == strcmp("==",exp_op) && !(generated_predef_info[x].value == exp_version)) return argi;
+                if (0 == strcmp("!=",exp_op) && !(generated_predef_info[x].value != exp_version)) return argi;
+            }
+        }
+    }
+    return result;
+}
diff --git a/tools/check/predef_check_as_c.c b/tools/check/predef_check_as_c.c
new file mode 100644
index 0000000..352c18b
--- /dev/null
+++ b/tools/check/predef_check_as_c.c
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_check.h"
diff --git a/tools/check/predef_check_as_cpp.cpp b/tools/check/predef_check_as_cpp.cpp
new file mode 100644
index 0000000..352c18b
--- /dev/null
+++ b/tools/check/predef_check_as_cpp.cpp
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_check.h"
diff --git a/tools/check/predef_check_as_objc.m b/tools/check/predef_check_as_objc.m
new file mode 100644
index 0000000..352c18b
--- /dev/null
+++ b/tools/check/predef_check_as_objc.m
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_check.h"
diff --git a/tools/check/predef_check_as_objcpp.mm b/tools/check/predef_check_as_objcpp.mm
new file mode 100644
index 0000000..352c18b
--- /dev/null
+++ b/tools/check/predef_check_as_objcpp.mm
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 2011-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)
+*/
+#include "predef_check.h"
diff --git a/tools/check/predef_check_cc.h b/tools/check/predef_check_cc.h
new file mode 100644
index 0000000..da7609e
--- /dev/null
+++ b/tools/check/predef_check_cc.h
@@ -0,0 +1,19 @@
+/*
+Copyright Rene Rivera 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)
+*/
+#include <boost/predef.h>
+
+#ifdef CHECK
+#   if ((CHECK) == 0)
+#       error "FAILED"
+#   endif
+#endif
+
+int dummy()
+{
+	static int d = 0;
+	return d++;
+}
diff --git a/tools/check/predef_check_cc_as_c.c b/tools/check/predef_check_cc_as_c.c
new file mode 100644
index 0000000..24fab13
--- /dev/null
+++ b/tools/check/predef_check_cc_as_c.c
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 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)
+*/
+#include "predef_check_cc.h"
diff --git a/tools/check/predef_check_cc_as_cpp.cpp b/tools/check/predef_check_cc_as_cpp.cpp
new file mode 100644
index 0000000..24fab13
--- /dev/null
+++ b/tools/check/predef_check_cc_as_cpp.cpp
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 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)
+*/
+#include "predef_check_cc.h"
diff --git a/tools/check/predef_check_cc_as_objc.m b/tools/check/predef_check_cc_as_objc.m
new file mode 100644
index 0000000..24fab13
--- /dev/null
+++ b/tools/check/predef_check_cc_as_objc.m
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 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)
+*/
+#include "predef_check_cc.h"
diff --git a/tools/check/predef_check_cc_as_objcpp.mm b/tools/check/predef_check_cc_as_objcpp.mm
new file mode 100644
index 0000000..24fab13
--- /dev/null
+++ b/tools/check/predef_check_cc_as_objcpp.mm
@@ -0,0 +1,7 @@
+/*
+Copyright Rene Rivera 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)
+*/
+#include "predef_check_cc.h"
diff --git a/tools/ci/build_log.py b/tools/ci/build_log.py
new file mode 100644
index 0000000..6ae156b
--- /dev/null
+++ b/tools/ci/build_log.py
@@ -0,0 +1,428 @@
+#!/usr/bin/env python
+
+# Copyright 2008 Rene Rivera
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+import re
+import optparse
+import time
+import xml.dom.minidom
+import xml.dom.pulldom
+from xml.sax.saxutils import unescape, escape
+import os.path
+from pprint import pprint
+from __builtin__ import exit
+
+class BuildOutputXMLParsing(object):
+    '''
+    XML parsing utilities for dealing with the Boost Build output
+    XML format.
+    '''
+    
+    def get_child_data( self, root, tag = None, id = None, name = None, strip = False, default = None ):
+        return self.get_data(self.get_child(root,tag=tag,id=id,name=name),strip=strip,default=default)
+    
+    def get_data( self, node, strip = False, default = None ):
+        data = None
+        if node:
+            data_node = None
+            if not data_node:
+                data_node = self.get_child(node,tag='#text')
+            if not data_node:
+                data_node = self.get_child(node,tag='#cdata-section')
+            data = ""
+            while data_node:
+                data += data_node.data
+                data_node = data_node.nextSibling
+                if data_node:
+                    if data_node.nodeName != '#text' \
+                        and data_node.nodeName != '#cdata-section':
+                        data_node = None
+        if not data:
+            data = default
+        else:
+            if strip:
+                data = data.strip()
+        return data
+    
+    def get_child( self, root, tag = None, id = None, name = None, type = None ):
+        return self.get_sibling(root.firstChild,tag=tag,id=id,name=name,type=type)
+    
+    def get_sibling( self, sibling, tag = None, id = None, name = None, type = None ):
+        n = sibling
+        while n:
+            found = True
+            if type and found:
+                found = found and type == n.nodeType
+            if tag and found:
+                found = found and tag == n.nodeName
+            if (id or name) and found:
+                found = found and n.nodeType == xml.dom.Node.ELEMENT_NODE
+            if id and found:
+                if n.hasAttribute('id'):
+                    found = found and n.getAttribute('id') == id
+                else:
+                    found = found and n.hasAttribute('id') and n.getAttribute('id') == id
+            if name and found:
+                found = found and n.hasAttribute('name') and n.getAttribute('name') == name
+            if found:
+                return n
+            n = n.nextSibling
+        return None
+
+class BuildOutputProcessor(BuildOutputXMLParsing):
+    
+    def __init__(self, inputs):
+        self.test = {}
+        self.target_to_test = {}
+        self.target = {}
+        self.parent = {}
+        self.timestamps = []
+        for input in inputs:
+            self.add_input(input)
+    
+    def add_input(self, input):
+        '''
+        Add a single build XML output file to our data.
+        '''
+        events = xml.dom.pulldom.parse(input)
+        context = []
+        for (event,node) in events:
+            if event == xml.dom.pulldom.START_ELEMENT:
+                context.append(node)
+                if node.nodeType == xml.dom.Node.ELEMENT_NODE:
+                    x_f = self.x_name_(*context)
+                    if x_f:
+                        events.expandNode(node)
+                        # expanding eats the end element, hence walking us out one level
+                        context.pop()
+                        # call handler
+                        (x_f[1])(node)
+            elif event == xml.dom.pulldom.END_ELEMENT:
+                context.pop()
+    
+    def x_name_(self, *context, **kwargs):
+        node = None
+        names = [ ]
+        for c in context:
+            if c:
+                if not isinstance(c,xml.dom.Node):
+                    suffix = '_'+c.replace('-','_').replace('#','_')
+                else:
+                    suffix = '_'+c.nodeName.replace('-','_').replace('#','_')
+                    node = c
+                names.append('x')
+                names = map(lambda x: x+suffix,names)
+        if node:
+            for name in names:
+                if hasattr(self,name):
+                    return (name,getattr(self,name))
+        return None
+    
+    def x_build_test(self, node):
+        '''
+        Records the initial test information that will eventually
+        get expanded as we process the rest of the results.
+        '''
+        test_node = node
+        test_name = test_node.getAttribute('name')
+        test_target = self.get_child_data(test_node,tag='target',strip=True)
+        ## print ">>> %s %s" %(test_name,test_target)
+        self.test[test_name] = {
+            'library' : "/".join(test_name.split('/')[0:-1]),
+            'test-name' : test_name.split('/')[-1],
+            'test-type' : test_node.getAttribute('type').lower(),
+            'test-program' : self.get_child_data(test_node,tag='source',strip=True),
+            'target' : test_target,
+            'info' : self.get_child_data(test_node,tag='info',strip=True),
+            'dependencies' : [],
+            'actions' : [],
+            }
+        # Add a lookup for the test given the test target.
+        self.target_to_test[self.test[test_name]['target']] = test_name
+        return None
+    
+    def x_build_targets_target( self, node ):
+        '''
+        Process the target dependency DAG into an ancestry tree so we can look up
+        which top-level library and test targets specific build actions correspond to.
+        '''
+        target_node = node
+        name = self.get_child_data(target_node,tag='name',strip=True)
+        path = self.get_child_data(target_node,tag='path',strip=True)
+        jam_target = self.get_child_data(target_node,tag='jam-target',strip=True)
+        #~ Map for jam targets to virtual targets.
+        self.target[jam_target] = {
+            'name' : name,
+            'path' : path
+            }
+        #~ Create the ancestry.
+        dep_node = self.get_child(self.get_child(target_node,tag='dependencies'),tag='dependency')
+        while dep_node:
+            child = self.get_data(dep_node,strip=True)
+            child_jam_target = '<p%s>%s' % (path,child.split('//',1)[1])
+            self.parent[child_jam_target] = jam_target
+            dep_node = self.get_sibling(dep_node.nextSibling,tag='dependency')
+        return None
+    
+    def x_build_action( self, node ):
+        '''
+        Given a build action log, process into the corresponding test log and
+        specific test log sub-part.
+        '''
+        action_node = node
+        name = self.get_child(action_node,tag='name')
+        if name:
+            name = self.get_data(name)
+            #~ Based on the action, we decide what sub-section the log
+            #~ should go into.
+            action_type = None
+            if re.match('[^%]+%[^.]+[.](compile)',name):
+                action_type = 'compile'
+            elif re.match('[^%]+%[^.]+[.](link|archive)',name):
+                action_type = 'link'
+            elif re.match('[^%]+%testing[.](capture-output)',name):
+                action_type = 'run'
+            elif re.match('[^%]+%testing[.](expect-failure|expect-success)',name):
+                action_type = 'result'
+            else:
+                # TODO: Enable to see what other actions can be included in the test results.
+                # action_type = None
+                action_type = 'other'
+            #~ print "+   [%s] %s %s :: %s" %(action_type,name,'','')
+            if action_type:
+                #~ Get the corresponding test.
+                (target,test) = self.get_test(action_node,type=action_type)
+                #~ Skip action that have no corresponding test as they are
+                #~ regular build actions and don't need to show up in the
+                #~ regression results.
+                if not test:
+                    ##print "??? [%s] %s %s :: %s" %(action_type,name,target,test)
+                    return None
+                ##print "+++ [%s] %s %s :: %s" %(action_type,name,target,test)
+                #~ Collect some basic info about the action.
+                action = {
+                    'command' : self.get_action_command(action_node,action_type),
+                    'output' : self.get_action_output(action_node,action_type),
+                    'info' : self.get_action_info(action_node,action_type)
+                    }
+                #~ For the test result status we find the appropriate node
+                #~ based on the type of test. Then adjust the result status
+                #~ accordingly. This makes the result status reflect the
+                #~ expectation as the result pages post processing does not
+                #~ account for this inversion.
+                action['type'] = action_type
+                if action_type == 'result':
+                    if re.match(r'^compile',test['test-type']):
+                        action['type'] = 'compile'
+                    elif re.match(r'^link',test['test-type']):
+                        action['type'] = 'link'
+                    elif re.match(r'^run',test['test-type']):
+                        action['type'] = 'run'
+                #~ The result sub-part we will add this result to.
+                if action_node.getAttribute('status') == '0':
+                    action['result'] = 'succeed'
+                else:
+                    action['result'] = 'fail'
+                # Add the action to the test.
+                test['actions'].append(action)
+                # Set the test result if this is the result action for the test.
+                if action_type == 'result':
+                    test['result'] = action['result']
+        return None
+    
+    def x_build_timestamp( self, node ):
+        '''
+        The time-stamp goes to the corresponding attribute in the result.
+        '''
+        self.timestamps.append(self.get_data(node).strip())
+        return None
+    
+    def get_test( self, node, type = None ):
+        '''
+        Find the test corresponding to an action. For testing targets these
+        are the ones pre-declared in the --dump-test option. For libraries
+        we create a dummy test as needed.
+        '''
+        jam_target = self.get_child_data(node,tag='jam-target')
+        base = self.target[jam_target]['name']
+        target = jam_target
+        while target in self.parent:
+            target = self.parent[target]
+        #~ print "--- TEST: %s ==> %s" %(jam_target,target)
+        #~ main-target-type is a precise indicator of what the build target is
+        #~ originally meant to be.
+        #main_type = self.get_child_data(self.get_child(node,tag='properties'),
+        #    name='main-target-type',strip=True)
+        main_type = None
+        if main_type == 'LIB' and type:
+            lib = self.target[target]['name']
+            if not lib in self.test:
+                self.test[lib] = {
+                    'library' : re.search(r'libs/([^/]+)',lib).group(1),
+                    'test-name' : os.path.basename(lib),
+                    'test-type' : 'lib',
+                    'test-program' : os.path.basename(lib),
+                    'target' : lib
+                    }
+            test = self.test[lib]
+        else:
+            target_name_ = self.target[target]['name']
+            if self.target_to_test.has_key(target_name_):
+                test = self.test[self.target_to_test[target_name_]]
+            else:
+                test = None
+        return (base,test)
+    
+    #~ The command executed for the action. For run actions we omit the command
+    #~ as it's just noise.
+    def get_action_command( self, action_node, action_type ):
+        if action_type != 'run':
+            return self.get_child_data(action_node,tag='command')
+        else:
+            return ''
+    
+    #~ The command output.
+    def get_action_output( self, action_node, action_type ):
+        return self.get_child_data(action_node,tag='output',default='')
+    
+    #~ Some basic info about the action.
+    def get_action_info( self, action_node, action_type ):
+        info = {}
+        #~ The jam action and target.
+        info['name'] = self.get_child_data(action_node,tag='name')
+        info['path'] = self.get_child_data(action_node,tag='path')
+        #~ The timing of the action.
+        info['time-start'] = action_node.getAttribute('start')
+        info['time-end'] = action_node.getAttribute('end')
+        info['time-user'] = action_node.getAttribute('user')
+        info['time-system'] = action_node.getAttribute('system')
+        #~ Testing properties.
+        test_info_prop = self.get_child_data(self.get_child(action_node,tag='properties'),name='test-info')
+        info['always_show_run_output'] = test_info_prop == 'always_show_run_output'
+        #~ And for compiles some context that may be hidden if using response files.
+        if action_type == 'compile':
+            info['define'] = []
+            define = self.get_child(self.get_child(action_node,tag='properties'),name='define')
+            while define:
+                info['define'].append(self.get_data(define,strip=True))
+                define = self.get_sibling(define.nextSibling,name='define')
+        return info
+
+class BuildConsoleSummaryReport(object):
+    
+    HEADER = '\033[35m\033[1m'
+    INFO = '\033[34m'
+    OK = '\033[32m'
+    WARNING = '\033[33m'
+    FAIL = '\033[31m'
+    ENDC = '\033[0m'
+    
+    def __init__(self, bop, opt):
+        self.bop = bop
+    
+    def generate(self):
+        self.summary_info = {
+            'total' : 0,
+            'success' : 0,
+            'failed' : [],
+            }
+        self.header_print("======================================================================")
+        self.print_test_log()
+        self.print_summary()
+        self.header_print("======================================================================")
+    
+    @property
+    def failed(self):
+        return len(self.summary_info['failed']) > 0
+    
+    def print_test_log(self):
+        self.header_print("Tests run..")
+        self.header_print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
+        for k in sorted(self.bop.test.keys()):
+            test = self.bop.test[k]
+            if len(test['actions']) > 0:
+                self.summary_info['total'] += 1
+                ##print ">>>> {0}".format(test['test-name'])
+                if 'result' in test:
+                    succeed = test['result'] == 'succeed'
+                else:
+                    succeed = test['actions'][-1]['result'] == 'succeed'
+                if succeed:
+                    self.summary_info['success'] += 1
+                else:
+                    self.summary_info['failed'].append(test)
+                if succeed:
+                    self.ok_print("[PASS] {0}",k)
+                else:
+                    self.fail_print("[FAIL] {0}",k)
+                for action in test['actions']:
+                    self.print_action(succeed, action)
+    
+    def print_action(self, test_succeed, action):
+        '''
+        Print the detailed info of failed or always print tests.
+        '''
+        #self.info_print(">>> {0}",action.keys())
+        if not test_succeed or action['info']['always_show_run_output']:
+            output = action['output'].strip()
+            if output != "":
+                p = self.fail_print if action['result'] == 'fail' else self.p_print
+                self.info_print("")
+                self.info_print("({0}) {1}",action['info']['name'],action['info']['path'])
+                p("")
+                p("{0}",action['command'].strip())
+                p("")
+                for line in output.splitlines():
+                    p("{0}",line.encode('utf-8'))
+    
+    def print_summary(self):
+        self.header_print("")
+        self.header_print("Testing summary..")
+        self.header_print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
+        self.p_print("Total: {0}",self.summary_info['total'])
+        self.p_print("Success: {0}",self.summary_info['success'])
+        if self.failed:
+            self.fail_print("Failed: {0}",len(self.summary_info['failed']))
+            for test in self.summary_info['failed']:
+                self.fail_print("  {0}/{1}",test['library'],test['test-name'])
+    
+    def p_print(self, format, *args, **kargs):
+        print format.format(*args,**kargs)
+    
+    def info_print(self, format, *args, **kargs):
+        print self.INFO+format.format(*args,**kargs)+self.ENDC
+    
+    def header_print(self, format, *args, **kargs):
+        print self.HEADER+format.format(*args,**kargs)+self.ENDC
+    
+    def ok_print(self, format, *args, **kargs):
+        print self.OK+format.format(*args,**kargs)+self.ENDC
+    
+    def warn_print(self, format, *args, **kargs):
+        print self.WARNING+format.format(*args,**kargs)+self.ENDC
+    
+    def fail_print(self, format, *args, **kargs):
+        print self.FAIL+format.format(*args,**kargs)+self.ENDC
+
+class Main(object):
+    
+    def __init__(self,args=None):
+        op = optparse.OptionParser(
+            usage="%prog [options] input+")
+        op.add_option( '--output',
+            help="type of output to generate" )
+        ( opt, inputs ) = op.parse_args(args)
+        bop = BuildOutputProcessor(inputs)
+        output = None
+        if opt.output == 'console':
+            output = BuildConsoleSummaryReport(bop, opt)
+        if output:
+            output.generate()
+            self.failed = output.failed
+
+if __name__ == '__main__':
+    m = Main()
+    if m.failed:
+        exit(-1)
diff --git a/tools/ci/common.py b/tools/ci/common.py
new file mode 100644
index 0000000..50ca860
--- /dev/null
+++ b/tools/ci/common.py
@@ -0,0 +1,878 @@
+#!/usr/bin/env python
+
+# Copyright Rene Rivera 2016
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import sys
+import inspect
+import optparse
+import os.path
+import string
+import time
+import subprocess
+import codecs
+import shutil
+import threading
+
+toolset_info = {
+    'clang-3.4' : {
+        'ppa' : ["ppa:h-rayflood/llvm"],
+        'package' : 'clang-3.4',
+        'command' : 'clang++-3.4',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-3.5' : {
+        'ppa' : ["ppa:h-rayflood/llvm"],
+        'package' : 'clang-3.5',
+        'command' : 'clang++-3.5',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-3.6' : {
+        'ppa' : ["ppa:h-rayflood/llvm"],
+        'package' : 'clang-3.6',
+        'command' : 'clang++-3.6',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-3.7' : {
+        'deb' : ["http://apt.llvm.org/trusty/","llvm-toolchain-trusty-3.7","main"],
+        'apt-key' : ['http://apt.llvm.org/llvm-snapshot.gpg.key'],
+        'package' : 'clang-3.7',
+        'command' : 'clang++-3.7',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-3.8' : {
+        'deb' : ["http://apt.llvm.org/trusty/","llvm-toolchain-trusty-3.8","main"],
+        'apt-key' : ['http://apt.llvm.org/llvm-snapshot.gpg.key'],
+        'package' : 'clang-3.8',
+        'command' : 'clang++-3.8',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-3.9' : {
+        'deb' : ["http://apt.llvm.org/trusty/","llvm-toolchain-trusty-3.9","main"],
+        'apt-key' : ['http://apt.llvm.org/llvm-snapshot.gpg.key'],
+        'package' : 'clang-3.9',
+        'command' : 'clang++-3.9',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-4.0' : {
+        'deb' : ["http://apt.llvm.org/trusty/","llvm-toolchain-trusty-4.0","main"],
+        'apt-key' : ['http://apt.llvm.org/llvm-snapshot.gpg.key'],
+        'package' : 'clang-4.0',
+        'command' : 'clang++-4.0',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-5.0' : {
+        'deb' : ["http://apt.llvm.org/trusty/","llvm-toolchain-trusty-5.0","main"],
+        'apt-key' : ['http://apt.llvm.org/llvm-snapshot.gpg.key'],
+        'package' : 'clang-5.0',
+        'command' : 'clang++-5.0',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'clang-6.0' : {
+        'deb' : ["http://apt.llvm.org/trusty/","llvm-toolchain-trusty-6.0","main"],
+        'apt-key' : ['http://apt.llvm.org/llvm-snapshot.gpg.key'],
+        'package' : 'clang-6.0',
+        'command' : 'clang++-6.0',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'gcc-4.7' : {
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-4.7',
+        'command' : 'g++-4.7',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'gcc-4.8' : {
+        'bin' : 'gcc-4.8',
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-4.8',
+        'command' : 'g++-4.8',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'gcc-4.9' : {
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-4.9',
+        'command' : 'g++-4.9',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'gcc-5.1' : {
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-5',
+        'command' : 'g++-5',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'gcc-5' : {
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-5',
+        'command' : 'g++-5',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'gcc-6' : {
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-6',
+        'command' : 'g++-6',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'gcc-7' : {
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-7',
+        'command' : 'g++-7',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'gcc-8' : {
+        'ppa' : ["ppa:ubuntu-toolchain-r/test"],
+        'package' : 'g++-8',
+        'command' : 'g++-8',
+        'toolset' : 'gcc',
+        'version' : ''
+        },
+    'mingw-5' : {
+        'toolset' : 'gcc',
+        'command' : 'C:\\\\MinGW\\\\bin\\\\g++.exe',
+        'version' : ''
+        },
+    'mingw64-6' : {
+        'toolset' : 'gcc',
+        'command' : 'C:\\\\mingw-w64\\\\x86_64-6.3.0-posix-seh-rt_v5-rev1\\\\mingw64\\\\bin\\\\g++.exe',
+        'version' : ''
+        },
+    'vs-2008' : {
+        'toolset' : 'msvc',
+        'command' : '',
+        'version' : '9.0'
+        },
+    'vs-2010' : {
+        'toolset' : 'msvc',
+        'command' : '',
+        'version' : '10.0'
+        },
+    'vs-2012' : {
+        'toolset' : 'msvc',
+        'command' : '',
+        'version' : '11.0'
+        },
+    'vs-2013' : {
+        'toolset' : 'msvc',
+        'command' : '',
+        'version' : '12.0'
+        },
+    'vs-2015' : {
+        'toolset' : 'msvc',
+        'command' : '',
+        'version' : '14.0'
+        },
+    'vs-2017' : {
+        'toolset' : 'msvc',
+        'command' : '',
+        'version' : '14.1'
+        },
+    'xcode-6.1' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-6.2' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-6.3' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-6.4' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-7.0' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-7.1' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-7.2' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-7.3' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-8.0' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-8.1' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-8.2' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-8.3' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-9.0' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    'xcode-9.1' : {
+        'command' : 'clang++',
+        'toolset' : 'clang',
+        'version' : ''
+        },
+    }
+
+class SystemCallError(Exception):
+    def __init__(self, command, result):
+        self.command = command
+        self.result = result
+    def __str__(self, *args, **kwargs):
+        return "'%s' ==> %s"%("' '".join(self.command), self.result)
+
+class utils:
+    
+    call_stats = []
+    
+    @staticmethod
+    def call(*command, **kargs):
+        utils.log( "%s> '%s'"%(os.getcwd(), "' '".join(command)) )
+        t = time.time()
+        result = subprocess.call(command, **kargs)
+        t = time.time()-t
+        if result != 0:
+            print "Failed: '%s' ERROR = %s"%("' '".join(command), result)
+        utils.call_stats.append((t,os.getcwd(),command,result))
+        utils.log( "%s> '%s' execution time %s seconds"%(os.getcwd(), "' '".join(command), t) )
+        return result
+    
+    @staticmethod
+    def print_call_stats():
+        utils.log("================================================================================")
+        for j in sorted(utils.call_stats, reverse=True):
+            utils.log("{:>12.4f}\t{}> {} ==> {}".format(*j))
+        utils.log("================================================================================")
+    
+    @staticmethod
+    def check_call(*command, **kargs):
+        cwd = os.getcwd()
+        result = utils.call(*command, **kargs)
+        if result != 0:
+            raise(SystemCallError([cwd].extend(command), result))
+    
+    @staticmethod
+    def makedirs( path ):
+        if not os.path.exists( path ):
+            os.makedirs( path )
+    
+    @staticmethod
+    def log_level():
+        frames = inspect.stack()
+        level = 0
+        for i in frames[ 3: ]:
+            if i[0].f_locals.has_key( '__log__' ):
+                level = level + i[0].f_locals[ '__log__' ]
+        return level
+    
+    @staticmethod
+    def log( message ):
+        sys.stdout.flush()
+        sys.stderr.flush()
+        sys.stderr.write( '# ' + '    ' * utils.log_level() +  message + '\n' )
+        sys.stderr.flush()
+
+    @staticmethod
+    def rmtree(path):
+        if os.path.exists( path ):
+            #~ shutil.rmtree( unicode( path ) )
+            if sys.platform == 'win32':
+                os.system( 'del /f /s /q "%s" >nul 2>&1' % path )
+                shutil.rmtree( unicode( path ) )
+            else:
+                os.system( 'rm -f -r "%s"' % path )
+
+    @staticmethod
+    def retry( f, max_attempts=5, sleep_secs=10 ):
+        for attempts in range( max_attempts, -1, -1 ):
+            try:
+                return f()
+            except Exception, msg:
+                utils.log( '%s failed with message "%s"' % ( f.__name__, msg ) )
+                if attempts == 0:
+                    utils.log( 'Giving up.' )
+                    raise
+
+                utils.log( 'Retrying (%d more attempts).' % attempts )
+                time.sleep( sleep_secs )
+
+    @staticmethod
+    def web_get( source_url, destination_file, proxy = None ):
+        import urllib
+
+        proxies = None
+        if proxy is not None:
+            proxies = {
+                'https' : proxy,
+                'http' : proxy
+                }
+
+        src = urllib.urlopen( source_url, proxies = proxies )
+
+        f = open( destination_file, 'wb' )
+        while True:
+            data = src.read( 16*1024 )
+            if len( data ) == 0: break
+            f.write( data )
+
+        f.close()
+        src.close()
+
+    @staticmethod
+    def unpack_archive( archive_path ):
+        utils.log( 'Unpacking archive ("%s")...' % archive_path )
+
+        archive_name = os.path.basename( archive_path )
+        extension = archive_name[ archive_name.find( '.' ) : ]
+
+        if extension in ( ".tar.gz", ".tar.bz2" ):
+            import tarfile
+            import stat
+
+            mode = os.path.splitext( extension )[1][1:]
+            tar = tarfile.open( archive_path, 'r:%s' % mode )
+            for tarinfo in tar:
+                tar.extract( tarinfo )
+                if sys.platform == 'win32' and not tarinfo.isdir():
+                    # workaround what appears to be a Win32-specific bug in 'tarfile'
+                    # (modification times for extracted files are not set properly)
+                    f = os.path.join( os.curdir, tarinfo.name )
+                    os.chmod( f, stat.S_IWRITE )
+                    os.utime( f, ( tarinfo.mtime, tarinfo.mtime ) )
+            tar.close()
+        elif extension in ( ".zip" ):
+            import zipfile
+
+            z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED )
+            for f in z.infolist():
+                destination_file_path = os.path.join( os.curdir, f.filename )
+                if destination_file_path[-1] == "/": # directory
+                    if not os.path.exists( destination_file_path  ):
+                        os.makedirs( destination_file_path  )
+                else: # file
+                    result = open( destination_file_path, 'wb' )
+                    result.write( z.read( f.filename ) )
+                    result.close()
+            z.close()
+        else:
+            raise 'Do not know how to unpack archives with extension \"%s\"' % extension
+    
+    @staticmethod
+    def make_file(filename, *text):
+        text = string.join( text, '\n' )
+        with codecs.open( filename, 'w', 'utf-8' ) as f:
+            f.write( text )
+    
+    @staticmethod
+    def append_file(filename, *text):
+        with codecs.open( filename, 'a', 'utf-8' ) as f:
+            f.write( string.join( text, '\n' ) )
+    
+    @staticmethod
+    def mem_info():
+        if sys.platform == "darwin":
+            utils.call("top","-l","1","-s","0","-n","0")
+        elif sys.platform.startswith("linux"):
+            utils.call("free","-m","-l")
+    
+    @staticmethod
+    def query_boost_version(boost_root):
+        '''
+        Read in the Boost version from a given boost_root.
+        '''
+        boost_version = None
+        if os.path.exists(os.path.join(boost_root,'Jamroot')):
+            with codecs.open(os.path.join(boost_root,'Jamroot'), 'r', 'utf-8') as f:
+                for line in f.readlines():
+                    parts = line.split()
+                    if len(parts) >= 5 and parts[1] == 'BOOST_VERSION':
+                        boost_version = parts[3]
+                        break
+        if not boost_version:
+            boost_version = 'default'
+        return boost_version
+    
+    @staticmethod
+    def git_clone(sub_repo, branch, commit = None, cwd = None, no_submodules = False):
+        '''
+        This clone mimicks the way Travis-CI clones a project's repo. So far
+        Travis-CI is the most limiting in the sense of only fetching partial
+        history of the repo.
+        '''
+        if not cwd:
+            cwd = cwd = os.getcwd()
+        root_dir = os.path.join(cwd,'boostorg',sub_repo)
+        if not os.path.exists(os.path.join(root_dir,'.git')):
+            utils.check_call("git","clone",
+                "--depth=1",
+                "--branch=%s"%(branch),
+                "https://github.com/boostorg/%s.git"%(sub_repo),
+                root_dir)
+            os.chdir(root_dir)
+        else:
+            os.chdir(root_dir)
+            utils.check_call("git","pull",
+                # "--depth=1", # Can't do depth as we get merge errors.
+                "--quiet","--no-recurse-submodules")
+        if commit:
+            utils.check_call("git","checkout","-qf",commit)
+        if os.path.exists(os.path.join('.git','modules')):
+            if sys.platform == 'win32':
+                utils.check_call('dir',os.path.join('.git','modules'))
+            else:
+                utils.check_call('ls','-la',os.path.join('.git','modules'))
+        if not no_submodules:
+            utils.check_call("git","submodule","--quiet","update",
+                "--quiet","--init","--recursive",
+                )
+            utils.check_call("git","submodule","--quiet","foreach","git","fetch")
+        return root_dir
+
+class parallel_call(threading.Thread):
+    '''
+    Runs a synchronous command in a thread waiting for it to complete.
+    '''
+    
+    def __init__(self, *command, **kargs):
+        super(parallel_call,self).__init__()
+        self.command = command
+        self.command_kargs = kargs
+        self.start()
+    
+    def run(self):
+        self.result = utils.call(*self.command, **self.command_kargs)
+    
+    def join(self):
+        super(parallel_call,self).join()
+        if self.result != 0:
+            raise(SystemCallError(self.command, self.result))
+
+def set_arg(args, k, v = None):
+    if not args.get(k):
+        args[k] = v
+    return args[k]
+
+class script_common(object):
+    '''
+    Main script to run Boost C++ Libraries continuous integration.
+    '''
+
+    def __init__(self, ci_klass, **kargs):
+        self.ci = ci_klass(self)
+
+        opt = optparse.OptionParser(
+            usage="%prog [options] [commands]")
+
+        #~ Debug Options:
+        opt.add_option( '--debug-level',
+            help="debugging level; controls the amount of debugging output printed",
+            type='int' )
+        opt.add_option( '-j',
+            help="maximum number of parallel jobs to use for building with b2",
+            type='int', dest='jobs')
+        opt.add_option('--branch')
+        opt.add_option('--commit')
+        kargs = self.init(opt,kargs)
+        kargs = self.ci.init(opt, kargs)
+        set_arg(kargs,'debug_level',0)
+        set_arg(kargs,'jobs',2)
+        set_arg(kargs,'branch',None)
+        set_arg(kargs,'commit',None)
+        set_arg(kargs,'repo',None)
+        set_arg(kargs,'root_dir',None)
+        set_arg(kargs,'actions',None)
+        set_arg(kargs,'pull_request', None)
+
+        #~ Defaults
+        for (k,v) in kargs.iteritems():
+            setattr(self,k,v)
+        ( _opt_, self.actions ) = opt.parse_args(None,self)
+        if not self.actions or self.actions == []:
+            self.actions = kargs.get('actions',None)
+        if not self.actions or self.actions == []:
+            self.actions = [ 'info' ]
+        if not self.root_dir:
+            self.root_dir = os.getcwd()
+        self.build_dir = os.path.join(os.path.dirname(self.root_dir), "build")
+        
+        # API keys.
+        self.bintray_key = os.getenv('BINTRAY_KEY')
+
+        try:
+            self.start()
+            self.command_info()
+            self.main()
+            utils.print_call_stats()
+        except:
+            utils.print_call_stats()
+            raise
+    
+    def init(self, opt, kargs):
+        return kargs
+    
+    def start(self):
+        pass
+
+    def main(self):
+        for action in self.actions:
+            action_m = "command_"+action.replace('-','_')
+            ci_command = getattr(self.ci, action_m, None)
+            ci_script = getattr(self, action_m, None)
+            if ci_command or ci_script:
+                utils.log( "### %s.."%(action) )
+                if os.path.exists(self.root_dir):
+                    os.chdir(self.root_dir)
+                if ci_command:
+                    ci_command()
+                elif ci_script:
+                    ci_script()
+        
+    def b2( self, *args, **kargs ):
+        cmd = ['b2','--debug-configuration', '-j%s'%(self.jobs)]
+        cmd.extend(args)
+
+        if 'toolset' in kargs:
+            cmd.append('toolset=' + kargs['toolset'])
+
+        if 'parallel' in kargs:
+            return parallel_call(*cmd)
+        else:
+            return utils.check_call(*cmd)
+
+    # Common test commands in the order they should be executed..
+    
+    def command_info(self):
+        pass
+    
+    def command_install(self):
+        utils.makedirs(self.build_dir)
+        os.chdir(self.build_dir)
+    
+    def command_install_toolset(self, toolset):
+        if self.ci and hasattr(self.ci,'install_toolset'):
+            self.ci.install_toolset(toolset)
+    
+    def command_before_build(self):
+        pass
+
+    def command_build(self):
+        pass
+
+    def command_before_cache(self):
+        pass
+
+    def command_after_success(self):
+        pass
+
+class ci_cli(object):
+    '''
+    This version of the script provides a way to do manual building. It sets up
+    additional environment and adds fetching of the git repos that would
+    normally be done by the CI system.
+    
+    The common way to use this variant is to invoke something like:
+    
+        mkdir boost-ci
+        cd boost-ci
+        python path-to/ci_boost_<script>.py --branch=develop [--repo=mylib] ...
+    
+    Status: In working order.
+    '''
+    
+    def __init__(self,script):
+        if sys.platform == 'darwin':
+            # Requirements for running on OSX:
+            # https://www.stack.nl/~dimitri/doxygen/download.html#srcbin
+            # https://tug.org/mactex/morepackages.html
+            doxygen_path = "/Applications/Doxygen.app/Contents/Resources"
+            if os.path.isdir(doxygen_path):
+                os.environ["PATH"] = doxygen_path+':'+os.environ['PATH']
+        self.script = script
+        self.work_dir = os.getcwd()
+        self.exit_result = 0
+    
+    def init(self, opt, kargs):
+        kargs['actions'] = [
+            'clone',
+            'install',
+            'before_build',
+            'build',
+            'before_cache',
+            'finish'
+            ]
+        opt.add_option( '--repo',
+            help="Boost repo short name we are testing with, and hence the repo we clone.")
+        set_arg(kargs,'repo','boost')
+        return kargs
+    
+    def finish(self, result):
+        self.exit_result = result
+    
+    def command_clone(self):
+        self.script.root_dir = os.path.join(self.work_dir,'boostorg',self.script.repo)
+        self.script.build_dir = os.path.join(os.path.dirname(self.script.root_dir), "build")
+        utils.git_clone(self.script.repo, self.script.branch, self.script.commit, self.work_dir)
+    
+    def command_finish(self):
+        exit(self.exit_result)
+
+class ci_travis(object):
+    '''
+    This variant build releases in the context of the Travis-CI service.
+    '''
+    
+    def __init__(self,script):
+        self.script = script
+        self.work_dir = os.getenv("HOME")
+    
+    def init(self, opt, kargs):
+        set_arg(kargs,'root_dir', os.getenv("TRAVIS_BUILD_DIR"))
+        set_arg(kargs,'branch', os.getenv("TRAVIS_BRANCH"))
+        set_arg(kargs,'commit', os.getenv("TRAVIS_COMMIT"))
+        set_arg(kargs,'repo', os.getenv("TRAVIS_REPO_SLUG").split("/")[1])
+        set_arg(kargs,'pull_request',
+            os.getenv('TRAVIS_PULL_REQUEST') \
+                if os.getenv('TRAVIS_PULL_REQUEST') != 'false' else None)
+        return kargs
+    
+    def finish(self, result):
+        exit(result)
+    
+    def install_toolset(self, toolset):
+        '''
+        Installs specific toolset on CI system.
+        '''
+        info = toolset_info[toolset]
+        if sys.platform.startswith('linux'):
+            os.chdir(self.work_dir)
+            if 'ppa' in info:
+                for ppa in info['ppa']:
+                    utils.check_call(
+                        'sudo','add-apt-repository','--yes',ppa)
+            if 'deb' in info:
+                utils.make_file('sources.list',
+                    "deb %s"%(' '.join(info['deb'])),
+                    "deb-src %s"%(' '.join(info['deb'])))
+                utils.check_call('sudo','bash','-c','cat sources.list >> /etc/apt/sources.list')
+            if 'apt-key' in info:
+                for key in info['apt-key']:
+                    utils.check_call('wget',key,'-O','apt.key')
+                    utils.check_call('sudo','apt-key','add','apt.key')
+            utils.check_call(
+                'sudo','apt-get','update','-qq')
+            utils.check_call(
+                'sudo','apt-get','install','-qq',info['package'])
+            if 'debugpackage' in info and info['debugpackage']:
+                utils.check_call(
+                    'sudo','apt-get','install','-qq',info['debugpackage'])
+
+    # Travis-CI commands in the order they are executed. We need
+    # these to forward to our common commands, if they are different.
+    
+    def command_before_install(self):
+        pass
+    
+    def command_install(self):
+        self.script.command_install()
+
+    def command_before_script(self):
+        self.script.command_before_build()
+
+    def command_script(self):
+        self.script.command_build()
+
+    def command_before_cache(self):
+        self.script.command_before_cache()
+
+    def command_after_success(self):
+        self.script.command_after_success()
+
+    def command_after_failure(self):
+        pass
+
+    def command_before_deploy(self):
+        pass
+
+    def command_after_deploy(self):
+        pass
+
+    def command_after_script(self):
+        pass
+
+class ci_circleci(object):
+    '''
+    This variant build releases in the context of the CircleCI service.
+    '''
+    
+    def __init__(self,script):
+        self.script = script
+        self.work_dir = os.getenv("HOME")
+    
+    def init(self, opt, kargs):
+        set_arg(kargs,'root_dir', os.path.join(os.getenv("HOME"),os.getenv("CIRCLE_PROJECT_REPONAME")))
+        set_arg(kargs,'branch', os.getenv("CIRCLE_BRANCH"))
+        set_arg(kargs,'commit', os.getenv("CIRCLE_SHA1"))
+        set_arg(kargs,'repo', os.getenv("CIRCLE_PROJECT_REPONAME").split("/")[1])
+        set_arg(kargs,'pull_request', os.getenv('CIRCLE_PR_NUMBER'))
+        return kargs
+    
+    def finish(self, result):
+        exit(result)
+    
+    def command_machine_post(self):
+        # Apt update for the pckages installs we'll do later.
+        utils.check_call('sudo','apt-get','-qq','update')
+        # Need PyYAML to read Travis yaml in a later step.
+        utils.check_call("pip","install","--user","PyYAML")
+    
+    def command_checkout_post(self):
+        os.chdir(self.script.root_dir)
+        utils.check_call("git","submodule","update","--quiet","--init","--recursive")
+    
+    def command_dependencies_pre(self):
+        # Read in .travis.yml for list of packages to install
+        # as CircleCI doesn't have a convenient apt install method.
+        import yaml
+        utils.check_call('sudo','-E','apt-get','-yqq','update')
+        utils.check_call('sudo','apt-get','-yqq','purge','texlive*')
+        with open(os.path.join(self.script.root_dir,'.travis.yml')) as yml:
+            travis_yml = yaml.load(yml)
+            utils.check_call('sudo','apt-get','-yqq',
+                '--no-install-suggests','--no-install-recommends','--force-yes','install',
+                *travis_yml['addons']['apt']['packages'])
+    
+    def command_dependencies_override(self):
+        self.script.command_install()
+    
+    def command_dependencies_post(self):
+        pass
+    
+    def command_database_pre(self):
+        pass
+    
+    def command_database_override(self):
+        pass
+    
+    def command_database_post(self):
+        pass
+    
+    def command_test_pre(self):
+        self.script.command_install()
+        self.script.command_before_build()
+    
+    def command_test_override(self):
+        # CircleCI runs all the test subsets. So in order to avoid
+        # running the after_success we do it here as the build step
+        # will halt accordingly.
+        self.script.command_build()
+        self.script.command_before_cache()
+        self.script.command_after_success()
+    
+    def command_test_post(self):
+        pass
+
+class ci_appveyor(object):
+    
+    def __init__(self,script):
+        self.script = script
+        self.work_dir = os.path.dirname(os.getenv("APPVEYOR_BUILD_FOLDER"))
+    
+    def init(self, opt, kargs):
+        set_arg(kargs,'root_dir',os.getenv("APPVEYOR_BUILD_FOLDER"))
+        set_arg(kargs,'branch',os.getenv("APPVEYOR_REPO_BRANCH"))
+        set_arg(kargs,'commit',os.getenv("APPVEYOR_REPO_COMMIT"))
+        set_arg(kargs,'repo',os.getenv("APPVEYOR_REPO_NAME").split("/")[1])
+        set_arg(kargs,'address_model',os.getenv("PLATFORM",None))
+        set_arg(kargs,'variant',os.getenv("CONFIGURATION","debug"))
+        set_arg(kargs,'pull_request', os.getenv('APPVEYOR_PULL_REQUEST_NUMBER'))
+        return kargs
+    
+    def finish(self, result):
+        exit(result)
+    
+    # Appveyor commands in the order they are executed. We need
+    # these to forward to our common commands, if they are different.
+    
+    def command_install(self):
+        self.script.command_install()
+    
+    def command_before_build(self):
+        os.chdir(self.script.root_dir)
+        utils.check_call("git","submodule","update","--quiet","--init","--recursive")
+        self.script.command_before_build()
+    
+    def command_build_script(self):
+        self.script.command_build()
+    
+    def command_after_build(self):
+        self.script.command_before_cache()
+    
+    def command_before_test(self):
+        pass
+    
+    def command_test_script(self):
+        pass
+    
+    def command_after_test(self):
+        pass
+    
+    def command_on_success(self):
+        self.script.command_after_success()
+    
+    def command_on_failure(self):
+        pass
+    
+    def command_on_finish(self):
+        pass
+
+def main(script_klass):
+    if os.getenv('TRAVIS', False):
+        script_klass(ci_travis)
+    elif os.getenv('CIRCLECI', False):
+        script_klass(ci_circleci)
+    elif os.getenv('APPVEYOR', False):
+        script_klass(ci_appveyor)
+    else:
+        script_klass(ci_cli)
diff --git a/tools/ci/library_test.py b/tools/ci/library_test.py
new file mode 100644
index 0000000..d7b0e87
--- /dev/null
+++ b/tools/ci/library_test.py
@@ -0,0 +1,198 @@
+#!/usr/bin/env python
+
+# Copyright Rene Rivera 2016
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import os.path
+import shutil
+import sys
+from common import toolset_info, main, utils, script_common, ci_cli, set_arg
+
+__dirname__ = os.path.dirname(os.path.realpath(__file__))
+
+class script(script_common):
+    '''
+    Main script to test a Boost C++ Library.
+    '''
+
+    def __init__(self, ci_klass, **kargs):
+        script_common.__init__(self, ci_klass, **kargs)
+    
+    def init(self, opt, kargs):
+        opt.add_option( '--toolset',
+            help="single toolset to test with" )
+        opt.add_option( '--target',
+            help="test target to build for testing, defaults to TARGET or 'minimal'")
+        opt.add_option( '--address-model',
+            help="address model to test, ie 64 or 32" )
+        opt.add_option( '--variant',
+            help="variant to test, ie debug, release" )
+        set_arg(kargs, 'toolset', os.getenv("TOOLSET"))
+        set_arg(kargs, 'target', os.getenv('TARGET', 'minimal'))
+        set_arg(kargs, 'address_model', os.getenv("ADDRESS_MODEL",None))
+        set_arg(kargs, 'variant', os.getenv("VARIANT","debug"))
+        set_arg(kargs, 'cxxflags', os.getenv("CXXFLAGS",None))
+        return kargs
+    
+    def start(self):
+        script_common.start(self)
+        # Some setup we need to redo for each invocation.
+        self.boost_root = os.path.join(self.ci.work_dir,'boostorg','boost')
+    
+    @property
+    def repo_path(self):
+        if not hasattr(self,'_repo_path'):
+            # Find the path for the submodule of the repo we are testing.
+            if self.repo != 'boost':
+                self._repo_path = None
+                with open(os.path.join(self.boost_root,'.gitmodules'),"rU") as f:
+                    path = None
+                    url = None
+                    for line in f:
+                        line = line.strip()
+                        if line.startswith("[submodule"):
+                            path = None
+                            url = None
+                        else:
+                            name = line.split("=")[0].strip()
+                            value = line.split("=")[1].strip()
+                            if name == "path":
+                                path = value
+                            elif name == "url":
+                                url = value
+                            if name and url and url.endswith("/%s.git"%(self.repo)):
+                                self._repo_path = path
+                if not self._repo_path:
+                    self._repo_path = "libs/%s"%(self.repo)
+        return self._repo_path
+    
+    def command_install(self):
+        script_common.command_install(self)
+        # Fetch & install toolset..
+        utils.log( "Install toolset: %s"%(self.toolset) )
+        if self.toolset:
+            self.command_install_toolset(self.toolset)
+    
+    def command_before_build(self):
+        script_common.command_before_build(self)
+        
+        # Clone boost super-project.
+        if self.repo != 'boost':
+            utils.git_clone('boost',self.branch,cwd=self.ci.work_dir,no_submodules=True)
+            utils.check_call("git","submodule","update","--quiet","--init","tools/build")
+            utils.check_call("git","submodule","update","--quiet","--init","tools/boostdep")
+            # The global jamfiles require config as they trigger build config checks.
+            utils.check_call("git","submodule","update","--quiet","--init","libs/config")
+        
+        # Find the path for the submodule of the repo we are testing.
+        if self.repo != 'boost':
+            self.repo_dir = os.path.join(self.boost_root,self.repo_path)
+            
+        if self.repo != 'boost':
+            # Copy in the existing library tree checkout.
+            shutil.rmtree(self.repo_path)
+            shutil.copytree(self.root_dir, self.repo_path)
+        
+        # Fetch the dependencies for the library we are testing.
+        if self.repo != 'boost':
+            os.chdir(self.boost_root)
+            utils.check_call(
+                sys.executable,
+                'tools/boostdep/depinst/depinst.py',
+                self.repo)
+        
+        # Create config file for toolset.
+        if not isinstance(self.ci, ci_cli):
+            cxxflags = None
+            if self.cxxflags:
+                cxxflags = self.cxxflags.split()
+                cxxflags = " <cxxflags>".join(cxxflags)
+            utils.make_file(os.path.join(self.boost_root, 'project-config.jam'),
+                """
+using %(toolset)s : %(version)s : %(command)s : %(cxxflags)s ;
+using python : %(pyversion)s : "%(python)s" ;
+"""%{
+                'toolset':toolset_info[self.toolset]['toolset'],
+                'version':toolset_info[self.toolset]['version'],
+                'command':toolset_info[self.toolset]['command'],
+                'cxxflags':"<cxxflags>"+cxxflags if cxxflags else "",
+                'pyversion':"%s.%s"%(sys.version_info[0],sys.version_info[1]),
+                'python':sys.executable.replace("\\","\\\\")
+                })
+
+    def command_build(self):
+        script_common.command_build(self)
+        
+        # Set up tools.
+        utils.makedirs(os.path.join(self.build_dir,'dist','bin'))
+        if not isinstance(self.ci, ci_cli) and toolset_info[self.toolset]['command']:
+            os.environ['PATH'] = os.pathsep.join([
+                os.path.dirname(toolset_info[self.toolset]['command']),
+                os.path.join(self.build_dir,'dist','bin'),
+                os.environ['PATH']])
+        else:
+            os.environ['PATH'] = os.pathsep.join([
+                os.path.join(self.build_dir,'dist','bin'),
+                os.environ['PATH']])
+        os.environ['BOOST_BUILD_PATH'] = self.build_dir
+        
+        # Bootstrap Boost Build engine.
+        os.chdir(os.path.join(self.boost_root,"tools","build"))
+        if sys.platform == 'win32':
+            utils.check_call(".\\bootstrap.bat")
+            shutil.copy2("b2.exe", os.path.join(self.build_dir,"dist","bin","b2.exe"))
+        else:
+            utils.check_call("./bootstrap.sh")
+            shutil.copy2("b2", os.path.join(self.build_dir,"dist","bin","b2"))
+        utils.check_call("git","clean","-dfqx")
+        
+        # Run the limited tests.
+        if self.repo != 'boost':
+            print("--- Testing %s ---"%(self.repo_path))
+            os.chdir(os.path.join(self.boost_root,'status'))
+            to_test = self.repo_path.split("/")
+            del to_test[0]
+            toolset_to_test = ""
+            if self.toolset:
+                if not isinstance(self.ci, ci_cli):
+                    toolset_to_test = toolset_info[self.toolset]['toolset']
+                else:
+                    toolset_to_test = self.toolset
+            self.b2(
+                '-d1',
+                '-p0',
+                '--include-tests=%s'%("/".join(to_test)),
+                'preserve-test-targets=off',
+                '--dump-tests',
+                '--build-dir=%s'%(self.build_dir),
+                '--out-xml=%s'%(os.path.join(self.build_dir,'regression.xml')),
+                '' if not toolset_to_test else 'toolset=%s'%(toolset_to_test),
+                '' if not self.address_model else 'address-model=%s'%(self.address_model),
+                'variant=%s'%(self.variant),
+                '--test-type=%s'%(self.target),
+                '--verbose-test'
+                )
+            
+            # Generate a readable test report.
+            import build_log
+            log_main = build_log.Main([
+                '--output=console',
+                os.path.join(self.build_dir,'regression.xml')])
+            # And exit with an error if the report contains failures.
+            # This lets the CI notice the error and report a failed build.
+            # And hence trigger the failure machinery, like sending emails.
+            if log_main.failed:
+                self.ci.finish(-1)
+
+    def command_before_cache(self):
+        script_common.command_before_cache(self)
+        os.chdir(self.boost_root)
+        utils.check_call("git","clean","-dfqx")
+        utils.check_call("git","submodule","--quiet","foreach","git","clean","-dfqx")
+        utils.check_call("git","status","-bs")
+        utils.check_call("git","submodule","foreach","git","status","-bs")
+
+main(script)