This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository mapbox-variant.

commit 66aad213ec27235844d7400d7788458426bfff3a
Author: Bas Couwenberg <sebas...@xs4all.nl>
Date:   Wed Jan 18 20:58:04 2017 +0100

    Imported Upstream version 1.1.5
---
 .travis.yml                    | 188 +++++++++++++++++++++++++----------------
 Makefile                       |  92 +++++++++++++-------
 README.md                      |   2 +-
 include/mapbox/variant.hpp     |  16 +++-
 package.json                   |  10 +++
 test/t/binary_visitor_impl.hpp |   4 +-
 6 files changed, 204 insertions(+), 108 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 4119d9e..0801c0e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,102 +2,136 @@ language: generic
 
 sudo: false
 
-# Save common build configurations as shortcuts, so we can reference them 
later.
-addons_shortcuts:
-  addons_clang35: &clang35
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.5' ]
-      packages: [ 'clang-3.5', 'llvm-3.5-dev' ]
-  addons_clang36: &clang36
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6' ]
-      packages: [ 'clang-3.6' ]
-  addons_clang37: &clang37
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7' ]
-      packages: [ 'clang-3.7' ]
-  addons_clang38: &clang38
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.8' ]
-      packages: [ 'clang-3.8']
-  addons_clang39: &clang39
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise' ]
-      packages: [ 'clang-3.9']
-  addons_gcc47: &gcc47
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test' ]
-      packages: [ 'g++-4.7' ]
-  addons_gcc48: &gcc48
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test' ]
-      packages: [ 'g++-4.8' ]
-  addons_gcc49: &gcc49
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test' ]
-      packages: [ 'g++-4.9' ]
-  addons_gcc5: &gcc5
-    apt:
-      sources: [ 'ubuntu-toolchain-r-test' ]
-      packages: [ 'g++-5' ]
-
 matrix:
   include:
+    # clang++ 3.9 via mason with -flto and -fsanitize=cfi
+    - os: linux
+      compiler: "clang++-39-mason"
+      env: CXX=clang++-3.9 CXXFLAGS="-flto -fsanitize=cfi -fvisibility=hidden" 
LDFLAGS="-flto -fsanitize=cfi -fvisibility=hidden"
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'libstdc++-4.9-dev' ]
+      before_install:
+        - git submodule update --init
+        - ./.mason/mason install clang++ 3.9.1
+        - export PATH=$(./.mason/mason prefix clang++ 3.9.1)/bin:${PATH}
+        - ./.mason/mason install binutils 2.27
+        - export PATH=$(./.mason/mason prefix binutils 2.27)/bin:${PATH}
+    # clang++ 3.9 via mason with -fsanitize=address
+    - os: linux
+      compiler: "clang++-39-mason"
+      env: CXX=clang++-3.9 CXXFLAGS="-fsanitize=address 
-fsanitize-address-use-after-scope -fno-omit-frame-pointer -fno-common" 
LDFLAGS="-fsanitize=address" 
ASAN_OPTIONS=check_initialization_order=1:detect_stack_use_after_return=1
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'libstdc++-4.9-dev' ]
+      before_install:
+        - git submodule update --init
+        - ./.mason/mason install clang++ 3.9.1
+        - export PATH=$(./.mason/mason prefix clang++ 3.9.1)/bin:${PATH}
+    # clang++ 3.9 via mason with -fsanitize=undefined
+    - os: linux
+      compiler: "clang++-39-mason"
+      env: CXX=clang++-3.9 CXXFLAGS="-fsanitize=undefined" 
LDFLAGS="-fsanitize=undefined"
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'libstdc++-4.9-dev' ]
+      before_install:
+        - git submodule update --init
+        - ./.mason/mason install clang++ 3.9.1
+        - export PATH=$(./.mason/mason prefix clang++ 3.9.1)/bin:${PATH}
+    # clang++ 3.9 via mason with -fsanitize=integer
+    - os: linux
+      compiler: "clang++-39-mason"
+      env: CXX=clang++-3.9 CXXFLAGS="-fsanitize=integer" 
LDFLAGS="-fsanitize=integer"
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'libstdc++-4.9-dev' ]
+      before_install:
+        - git submodule update --init
+        - ./.mason/mason install clang++ 3.9.1
+        - export PATH=$(./.mason/mason prefix clang++ 3.9.1)/bin:${PATH}
+    # clang++ 3.9 via mason with -fsanitize=safe-stack
+    - os: linux
+      compiler: "clang++-39-mason"
+      env: CXX=clang++-3.9 CXXFLAGS="-fsanitize=safe-stack" 
LDFLAGS="-fsanitize=safe-stack"
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'libstdc++-4.9-dev' ]
+      before_install:
+        - git submodule update --init
+        - ./.mason/mason install clang++ 3.9.1
+        - export PATH=$(./.mason/mason prefix clang++ 3.9.1)/bin:${PATH}
     - os: osx
-      osx_image: xcode7
-      env: TEST_GYP_BUILD=True
+      osx_image: xcode8
+      env: OSX_OLDEST_SUPPORTED=10.7 TEST_GYP_BUILD=True
+      compiler: clang
+    - os: osx
+      osx_image: xcode8
+      env: OSX_OLDEST_SUPPORTED=10.12
       compiler: clang
     - os: linux
       compiler: "clang35"
       env: CXX=clang++-3.5 COVERAGE=True
-      addons: *clang35
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.5' ]
+          packages: [ 'clang-3.5', 'libstdc++-4.9-dev' ]
     - os: linux
       compiler: "clang36"
       env: CXX=clang++-3.6
-      addons: *clang36
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6' ]
+          packages: [ 'clang-3.6' ]
     - os: linux
       compiler: "clang37"
       env: CXX=clang++-3.7
-      addons: *clang37
-    - os: linux
-      compiler: "clang38"
-      env: CXX=clang++-3.8
-      addons: *clang38
-    - os: linux
-      compiler: "clang38"
-      env: CXX=clang++-3.8 CXX_STD=c++14
-      addons: *clang38
-    # not whitelisted yet: 
https://github.com/travis-ci/apt-package-whitelist/issues/2764
-    #- os: linux
-    #  compiler: "clang39"
-    #  env: CXX=clang++-3.9
-    #  addons: *clang39
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7' ]
+          packages: [ 'clang-3.7' ]
     - os: linux
       compiler: "gcc47"
-      env: CXX=g++-4.7
-      addons: *gcc47
+      env: CXX=g++-4.7 CXXFLAGS="-Wno-parentheses"
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'g++-4.7' ]
     - os: linux
       compiler: "gcc48"
       env: CXX=g++-4.8
-      addons: *gcc48
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'g++-4.8' ]
     - os: linux
       compiler: "gcc49"
       env: CXX=g++-4.9
-      addons: *gcc49
-    - os: linux
-      compiler: "gcc49"
-      env: CXX=g++-4.9 CXX_STD=c++14
-      addons: *gcc49
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'g++-4.9' ]
     - os: linux
       compiler: "gcc5"
-      env: CXX=g++-5 CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"
-      addons: *gcc5
+      env: CXX=g++-5
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'g++-5' ]
     - os: linux
-      compiler: "gcc5"
-      env: CXX=g++-5 CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=1"
-      addons: *gcc5
+      compiler: "gcc6"
+      env: CXX=g++-6 CXX_STD=c++14
+      addons:
+        apt:
+          sources: [ 'ubuntu-toolchain-r-test' ]
+          packages: [ 'g++-6' ]
 
-before_install:
+install:
  - echo ${CXX}
  - if [[ $(uname -s) == 'Linux' ]]; then
      export PYTHONPATH=$(pwd)/.local/lib/python2.7/site-packages;
@@ -108,7 +142,15 @@ before_install:
      PYTHONUSERBASE=$(pwd)/.local pip install --user cpp-coveralls;
    fi
 
-install:
+script:
+ # Build in Release
+ - make test
+ - make bench
+ - make sizes
+ - scripts/run_compilation_failure_tests.sh
+ - make clean;
+ # Build in Debug
+ - export BUILDTYPE=Debug
  - make test
  - make bench
  - make sizes
@@ -118,7 +160,7 @@ install:
      make gyp;
    fi
 
-script:
+after_script:
  - if [[ ${COVERAGE:-0} == 'True' ]]; then
     make clean;
     make coverage;
diff --git a/Makefile b/Makefile
index 10ab7b5..808592d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,23 +1,53 @@
 MASON = .mason/mason
-BOOST_VERSION = boost 1.60.0
+BOOST_VERSION = 1.62.0
 
 CXX := $(CXX)
 CXX_STD ?= c++11
 
-BOOST_FLAGS = `$(MASON) cflags $(BOOST_VERSION)`
-RELEASE_FLAGS = -O3 -DNDEBUG -march=native -DSINGLE_THREADED 
-fvisibility-inlines-hidden
-DEBUG_FLAGS = -O0 -g -DDEBUG -fno-inline-functions
-COMMON_FLAGS = -Wall -pedantic -Wextra -Wsign-compare -Wsign-conversion 
-Wshadow -Wunused-parameter -std=$(CXX_STD)
+BOOST_ROOT = $(shell $(MASON) prefix boost $(BOOST_VERSION))
+BOOST_FLAGS = -isystem $(BOOST_ROOT)/include/
+RELEASE_FLAGS = -O3 -DNDEBUG -march=native -DSINGLE_THREADED 
-fvisibility-inlines-hidden -fvisibility=hidden
+DEBUG_FLAGS = -O0 -g -DDEBUG -fno-inline-functions -fno-omit-frame-pointer 
-fPIE
+WARNING_FLAGS = -Werror -Wall -Wextra -pedantic \
+               -Wformat=2 -Wsign-conversion -Wshadow -Wunused-parameter
+
+COMMON_FLAGS = -std=$(CXX_STD)
+COMMON_FLAGS += $(WARNING_FLAGS)
+
 CXXFLAGS := $(CXXFLAGS)
 LDFLAGS := $(LDFLAGS)
 
+export BUILDTYPE ?= Release
+
+OS := $(shell uname -s)
+ifeq ($(OS), Linux)
+  EXTRA_FLAGS = -pthread
+endif
+ifeq ($(OS), Darwin)
+  OSX_OLDEST_SUPPORTED ?= 10.7
+  # we need to explicitly ask for libc++ otherwise the
+  # default will flip back to libstdc++ for mmacosx-version-min < 10.9
+  EXTRA_FLAGS = -stdlib=libc++ -mmacosx-version-min=$(OSX_OLDEST_SUPPORTED)
+endif
+
+
+ifeq ($(BUILDTYPE),Release)
+       FINAL_CXXFLAGS := $(COMMON_FLAGS) $(RELEASE_FLAGS) $(CXXFLAGS) 
$(EXTRA_FLAGS)
+else
+       FINAL_CXXFLAGS := $(COMMON_FLAGS) $(DEBUG_FLAGS) $(CXXFLAGS) 
$(EXTRA_FLAGS)
+endif
+
+
+
 ALL_HEADERS = $(shell find include/mapbox/ '(' -name '*.hpp' ')')
 
 all: out/bench-variant out/unique_ptr_test out/unique_ptr_test 
out/recursive_wrapper_test out/binary_visitor_test out/lambda_overload_test 
out/hashable_test
 
-mason_packages:
+$(MASON):
        git submodule update --init .mason
-       $(MASON) install $(BOOST_VERSION)
+
+mason_packages/headers/boost: $(MASON)
+       $(MASON) install boost $(BOOST_VERSION)
 
 ./deps/gyp:
        git clone --depth 1 https://chromium.googlesource.com/external/gyp.git 
./deps/gyp
@@ -25,35 +55,35 @@ mason_packages:
 gyp: ./deps/gyp
        deps/gyp/gyp --depth=. -Goutput_dir=./ --generator-output=./out -f make
        make V=1 -C ./out tests
-       ./out/Release/tests
+       ./out/$(BUILDTYPE)/tests
 
-out/bench-variant-debug: Makefile mason_packages test/bench_variant.cpp
+out/bench-variant-debug: Makefile mason_packages/headers/boost 
test/bench_variant.cpp
        mkdir -p ./out
-       $(CXX) -o out/bench-variant-debug test/bench_variant.cpp -I./include 
-Itest/include -pthreads $(DEBUG_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) $(LDFLAGS) 
$(BOOST_FLAGS)
+       $(CXX) -o out/bench-variant-debug test/bench_variant.cpp -I./include 
-isystem test/include $(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS)
 
-out/bench-variant: Makefile mason_packages test/bench_variant.cpp
+out/bench-variant: Makefile mason_packages/headers/boost test/bench_variant.cpp
        mkdir -p ./out
-       $(CXX) -o out/bench-variant test/bench_variant.cpp -I./include 
-Itest/include $(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) $(LDFLAGS) 
$(BOOST_FLAGS)
+       $(CXX) -o out/bench-variant test/bench_variant.cpp -I./include -isystem 
test/include $(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS)
 
-out/unique_ptr_test: Makefile mason_packages test/unique_ptr_test.cpp
+out/unique_ptr_test: Makefile mason_packages/headers/boost 
test/unique_ptr_test.cpp
        mkdir -p ./out
-       $(CXX) -o out/unique_ptr_test test/unique_ptr_test.cpp -I./include 
-Itest/include $(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) $(LDFLAGS) 
$(BOOST_FLAGS)
+       $(CXX) -o out/unique_ptr_test test/unique_ptr_test.cpp -I./include 
-isystem test/include $(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS)
 
-out/recursive_wrapper_test: Makefile mason_packages 
test/recursive_wrapper_test.cpp
+out/recursive_wrapper_test: Makefile mason_packages/headers/boost 
test/recursive_wrapper_test.cpp
        mkdir -p ./out
-       $(CXX) -o out/recursive_wrapper_test test/recursive_wrapper_test.cpp 
-I./include -Itest/include $(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) 
$(LDFLAGS) $(BOOST_FLAGS)
+       $(CXX) -o out/recursive_wrapper_test test/recursive_wrapper_test.cpp 
-I./include -isystem test/include $(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS)
 
-out/binary_visitor_test: Makefile mason_packages test/binary_visitor_test.cpp
+out/binary_visitor_test: Makefile mason_packages/headers/boost 
test/binary_visitor_test.cpp
        mkdir -p ./out
-       $(CXX) -o out/binary_visitor_test test/binary_visitor_test.cpp 
-I./include -Itest/include $(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) 
$(LDFLAGS) $(BOOST_FLAGS)
+       $(CXX) -o out/binary_visitor_test test/binary_visitor_test.cpp 
-I./include -isystem test/include $(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS)
 
-out/lambda_overload_test: Makefile mason_packages test/lambda_overload_test.cpp
+out/lambda_overload_test: Makefile mason_packages/headers/boost 
test/lambda_overload_test.cpp
        mkdir -p ./out
-       $(CXX) -o out/lambda_overload_test test/lambda_overload_test.cpp 
-I./include -Itest/include $(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) 
$(LDFLAGS) $(BOOST_FLAGS)
+       $(CXX) -o out/lambda_overload_test test/lambda_overload_test.cpp 
-I./include -isystem test/include $(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS)
 
-out/hashable_test: Makefile mason_packages test/hashable_test.cpp
+out/hashable_test: Makefile mason_packages/headers/boost test/hashable_test.cpp
        mkdir -p ./out
-       $(CXX) -o out/hashable_test test/hashable_test.cpp -I./include 
-Itest/include $(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) $(LDFLAGS) 
$(BOOST_FLAGS)
+       $(CXX) -o out/hashable_test test/hashable_test.cpp -I./include -isystem 
test/include $(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS)
 
 bench: out/bench-variant out/unique_ptr_test out/unique_ptr_test 
out/recursive_wrapper_test out/binary_visitor_test
        ./out/bench-variant 100000
@@ -63,11 +93,11 @@ bench: out/bench-variant out/unique_ptr_test 
out/unique_ptr_test out/recursive_w
 
 out/unit.o: Makefile test/unit.cpp
        mkdir -p ./out
-       $(CXX) -c -o $@ test/unit.cpp -Itest/include $(DEBUG_FLAGS) 
$(COMMON_FLAGS) $(CXXFLAGS)
+       $(CXX) -c -o $@ test/unit.cpp -isystem test/include $(FINAL_CXXFLAGS)
 
 out/%.o: test/t/%.cpp Makefile $(ALL_HEADERS)
        mkdir -p ./out
-       $(CXX) -c -o $@ $< -Iinclude -Itest/include $(DEBUG_FLAGS) 
$(COMMON_FLAGS) $(CXXFLAGS)
+       $(CXX) -c -o $@ $< -Iinclude -isystem test/include $(FINAL_CXXFLAGS)
 
 out/unit: out/unit.o out/binary_visitor_1.o out/binary_visitor_2.o 
out/binary_visitor_3.o out/binary_visitor_4.o out/binary_visitor_5.o 
out/binary_visitor_6.o out/issue21.o out/issue122.o out/mutating_visitor.o 
out/optional.o out/recursive_wrapper.o out/sizeof.o out/unary_visitor.o 
out/variant.o
        mkdir -p ./out
@@ -78,14 +108,14 @@ test: out/unit
 
 coverage:
        mkdir -p ./out
-       $(CXX) -o out/cov-test --coverage test/unit.cpp test/t/*.cpp 
-I./include -Itest/include $(DEBUG_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) $(LDFLAGS)
+       $(CXX) -o out/cov-test --coverage test/unit.cpp test/t/*.cpp 
-I./include -isystem test/include $(FINAL_CXXFLAGS) $(LDFLAGS)
 
 sizes: Makefile
        mkdir -p ./out
-       @$(CXX) -o ./out/our_variant_hello_world.out include/mapbox/variant.hpp 
-I./include $(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) &&  du -h 
./out/our_variant_hello_world.out
-       @$(CXX) -o ./out/boost_variant_hello_world.out `$(MASON) prefix boost 
1.60.0`/include/boost/variant.hpp -I./include $(RELEASE_FLAGS) $(COMMON_FLAGS) 
$(CXXFLAGS) $(BOOST_FLAGS) &&  du -h ./out/boost_variant_hello_world.out
-       @$(CXX) -o ./out/our_variant_hello_world 
./test/our_variant_hello_world.cpp -I./include $(RELEASE_FLAGS) $(COMMON_FLAGS) 
$(CXXFLAGS) &&  du -h ./out/our_variant_hello_world
-       @$(CXX) -o ./out/boost_variant_hello_world 
./test/boost_variant_hello_world.cpp -I./include $(RELEASE_FLAGS) 
$(COMMON_FLAGS) $(CXXFLAGS)  $(BOOST_FLAGS) &&  du -h 
./out/boost_variant_hello_world
+       @$(CXX) -o ./out/our_variant_hello_world.out include/mapbox/variant.hpp 
-I./include $(FINAL_CXXFLAGS) &&  du -h ./out/our_variant_hello_world.out
+       @$(CXX) -o ./out/boost_variant_hello_world.out 
$(BOOST_ROOT)/include/boost/variant.hpp -I./include $(FINAL_CXXFLAGS) 
$(BOOST_FLAGS) &&  du -h ./out/boost_variant_hello_world.out
+       @$(CXX) -o ./out/our_variant_hello_world 
./test/our_variant_hello_world.cpp -I./include $(FINAL_CXXFLAGS) &&  du -h 
./out/our_variant_hello_world
+       @$(CXX) -o ./out/boost_variant_hello_world 
./test/boost_variant_hello_world.cpp -I./include $(FINAL_CXXFLAGS) 
$(BOOST_FLAGS) &&  du -h ./out/boost_variant_hello_world
 
 profile: out/bench-variant-debug
        mkdir -p profiling/
@@ -102,8 +132,8 @@ clean:
        rm -f *.gcda *.gcno
 
 pgo: out Makefile
-       $(CXX) -o out/bench-variant test/bench_variant.cpp -I./include 
$(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS) -pg 
-fprofile-generate
+       $(CXX) -o out/bench-variant test/bench_variant.cpp -I./include 
$(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS) -pg -fprofile-generate
        ./test-variant 500000 >/dev/null 2>/dev/null
-       $(CXX) -o out/bench-variant test/bench_variant.cpp -I./include 
$(RELEASE_FLAGS) $(COMMON_FLAGS) $(CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS) 
-fprofile-use
+       $(CXX) -o out/bench-variant test/bench_variant.cpp -I./include 
$(FINAL_CXXFLAGS) $(LDFLAGS) $(BOOST_FLAGS) -fprofile-use
 
 .PHONY: sizes test
diff --git a/README.md b/README.md
index 0e274b0..c230826 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@ Response ret = makeRequest();
 To see which type the `Response` holds you pattern match on the variant 
unwrapping the underlying value:
 
 ```c++
-ret.match([] (Result r) { print(r.object); }
+ret.match([] (Result r) { print(r.object); },
           [] (Error e)  { print(e.message); });
 ```
 
diff --git a/include/mapbox/variant.hpp b/include/mapbox/variant.hpp
index fb0f77e..9b73934 100644
--- a/include/mapbox/variant.hpp
+++ b/include/mapbox/variant.hpp
@@ -107,11 +107,24 @@ struct direct_type<T>
 
 #if __cpp_lib_logical_traits >= 201510L
 
+using std::conjunction;
 using std::disjunction;
 
 #else
 
 template <typename...>
+struct conjunction : std::true_type {};
+
+template <typename B1>
+struct conjunction<B1> : B1 {};
+
+template <typename B1, typename B2>
+struct conjunction<B1, B2> : std::conditional<B1::value, B2, B1>::type {};
+
+template <typename B1, typename... Bs>
+struct conjunction<B1, Bs...> : std::conditional<B1::value, 
conjunction<Bs...>, B1>::type {};
+
+template <typename...>
 struct disjunction : std::false_type {};
 
 template <typename B1>
@@ -595,7 +608,8 @@ public:
         helper_type::copy(old.type_index, &old.data, &data);
     }
 
-    VARIANT_INLINE variant(variant<Types...>&& old) 
noexcept(std::is_nothrow_move_constructible<types>::value)
+    VARIANT_INLINE variant(variant<Types...>&& old)
+        
noexcept(detail::conjunction<std::is_nothrow_move_constructible<Types>...>::value)
         : type_index(old.type_index)
     {
         helper_type::move(old.type_index, &old.data, &data);
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..82ea26a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,10 @@
+{
+    "name": "variant",
+    "version": "1.3.0",
+    "description": "C++11/C++14 variant",
+    "main": "./package.json",
+    "repository"   :  {
+      "type" : "git",
+      "url"  : "git://github.com/mapbox/variant.git"
+    }
+}
diff --git a/test/t/binary_visitor_impl.hpp b/test/t/binary_visitor_impl.hpp
index f2db68b..4ee1f08 100644
--- a/test/t/binary_visitor_impl.hpp
+++ b/test/t/binary_visitor_impl.hpp
@@ -160,8 +160,8 @@ struct swap_visitor
     {
         using T = typename std::common_type<A, B>::type;
         T tmp = a;
-        a = b;
-        b = tmp;
+        a = static_cast<A>(b);
+        b = static_cast<B>(tmp);
     }
 };
 

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-grass/mapbox-variant.git

_______________________________________________
Pkg-grass-devel mailing list
Pkg-grass-devel@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

Reply via email to