From b059ed3bf9de5204229ff6d23c9e04d5f717a093 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 18:31:53 +0200 Subject: [PATCH 01/13] Add .travis.yml. --- .travis.yml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..e7c1f6b --- /dev/null +++ b/.travis.yml @@ -0,0 +1,39 @@ +# Copyright 2016 Peter Dimov +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) + +language: cpp + +sudo: false + +python: "2.7" + +os: + - linux + - osx + +branches: + only: + - master + - develop + +install: + - cd .. + - git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + - cd boost-root + - git submodule update --init --depth 1 tools/build + - git submodule update --init --depth 1 libs/config + - git submodule update --init --depth 1 tools/boostdep + - cp -r $TRAVIS_BUILD_DIR/* libs/mp11 + - python tools/boostdep/depinst/depinst.py mp11 + - ./bootstrap.sh + - ./b2 headers + +script: + - TOOLSET=gcc,clang + - if [ $TRAVIS_OS_NAME == osx ]; then TOOLSET=clang; fi + - ./b2 libs/mp11/test toolset=$TOOLSET + +notifications: + email: + on_success: always From d5dc106b336615a866f14316c42994b124713a2e Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 18:43:19 +0200 Subject: [PATCH 02/13] Make libs/mp11 directory in .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index e7c1f6b..baf483c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,7 @@ install: - git submodule update --init --depth 1 tools/build - git submodule update --init --depth 1 libs/config - git submodule update --init --depth 1 tools/boostdep + - mkdir libs/mp11 - cp -r $TRAVIS_BUILD_DIR/* libs/mp11 - python tools/boostdep/depinst/depinst.py mp11 - ./bootstrap.sh From 128921e9be125f0d3264fca14e1388d133cf5fd2 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 19:04:45 +0200 Subject: [PATCH 03/13] Add a test matrix with more g++, clang++ versions to .travis.yml --- .travis.yml | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index baf483c..5659e8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,63 @@ branches: - master - develop +env: + matrix: + - BOGUS_JOB=true + +addons: + apt: + packages: + - g++-4.9 + - g++-5 + - g++-6 + - clang-3.5 + - clang-3.6 + - clang-3.7 + - clang-3.8 + - clang-3.9 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise + - llvm-toolchain-precise-3.5 + - llvm-toolchain-precise-3.6 + - llvm-toolchain-precise-3.7 + - llvm-toolchain-precise-3.8 + - llvm-toolchain-precise-3.9 + +matrix: + + exclude: + - env: BOGUS_JOB=true + + include: + - os: linux + env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=c++11 + + - os: linux + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++11 + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 + + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=c++11 + + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=c++11 + + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=c++11 + + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++11 + + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++11 + + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11 + install: - cd .. - git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root @@ -31,8 +88,7 @@ install: - ./b2 headers script: - - TOOLSET=gcc,clang - - if [ $TRAVIS_OS_NAME == osx ]; then TOOLSET=clang; fi + - echo using $TOOLSET : : $COMPILER : -std=$CXXSTD ; > ~/user-config.jam - ./b2 libs/mp11/test toolset=$TOOLSET notifications: From e46bb48bc39eb9d4d5998e0a3010ca88d1a78abf Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 19:09:23 +0200 Subject: [PATCH 04/13] Escape echo using line in .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5659e8b..3b5b711 100644 --- a/.travis.yml +++ b/.travis.yml @@ -88,7 +88,8 @@ install: - ./b2 headers script: - - echo using $TOOLSET : : $COMPILER : -std=$CXXSTD ; > ~/user-config.jam + - | + echo using $TOOLSET : : $COMPILER : -std=$CXXSTD ; > ~/user-config.jam - ./b2 libs/mp11/test toolset=$TOOLSET notifications: From d896aaae2f45e45018a8dd03b58b68fdb8d39212 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 19:14:06 +0200 Subject: [PATCH 05/13] Remove clang-3.5 package from .travis.yml as it conflicts with 3.6, 3.7, 3.8 --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3b5b711..6b40572 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,6 @@ addons: - g++-4.9 - g++-5 - g++-6 - - clang-3.5 - clang-3.6 - clang-3.7 - clang-3.8 From 64ea353f73c43d944a1c70b60c7f41d115da893a Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 19:22:36 +0200 Subject: [PATCH 06/13] Escape (again) 'using' line in .travis.yml --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6b40572..ce6222d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -87,8 +87,7 @@ install: - ./b2 headers script: - - | - echo using $TOOLSET : : $COMPILER : -std=$CXXSTD ; > ~/user-config.jam + - echo "using $TOOLSET : : $COMPILER : -std=$CXXSTD ;" > ~/user-config.jam - ./b2 libs/mp11/test toolset=$TOOLSET notifications: From 1814f8088cfbd80450f79fd8f17a127551f8e11e Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 19:23:56 +0200 Subject: [PATCH 07/13] Escape (yet again) 'using' line in .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ce6222d..b2a3221 100644 --- a/.travis.yml +++ b/.travis.yml @@ -87,7 +87,8 @@ install: - ./b2 headers script: - - echo "using $TOOLSET : : $COMPILER : -std=$CXXSTD ;" > ~/user-config.jam + - |- + echo "using $TOOLSET : : $COMPILER : -std=$CXXSTD ;" > ~/user-config.jam - ./b2 libs/mp11/test toolset=$TOOLSET notifications: From db2384ecd48633057a3a872bd01086f1263bbab7 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 20:00:58 +0200 Subject: [PATCH 08/13] Remove clang-3.5,3.9 from .travis.yml; extend g++ workaround in mp_valid to 6.x --- .travis.yml | 9 --------- test/mp_valid.cpp | 4 ++-- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index b2a3221..dd2095c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,15 +30,12 @@ addons: - clang-3.6 - clang-3.7 - clang-3.8 - - clang-3.9 sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise - - llvm-toolchain-precise-3.5 - llvm-toolchain-precise-3.6 - llvm-toolchain-precise-3.7 - llvm-toolchain-precise-3.8 - - llvm-toolchain-precise-3.9 matrix: @@ -55,9 +52,6 @@ matrix: - os: linux env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 - - os: linux - env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=c++11 - - os: linux env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=c++11 @@ -67,9 +61,6 @@ matrix: - os: linux env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++11 - - os: linux - env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++11 - - os: osx env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11 diff --git a/test/mp_valid.cpp b/test/mp_valid.cpp index 65ecb9c..ed11ed1 100644 --- a/test/mp_valid.cpp +++ b/test/mp_valid.cpp @@ -48,8 +48,8 @@ int main() #endif BOOST_TEST_TRAIT_FALSE((mp_valid)); -#if !defined( BOOST_GCC ) || !BOOST_WORKAROUND( BOOST_GCC, < 50500 ) - // g++ up to at least 5.4 doesn't like add_reference for some reason or other +#if !defined( BOOST_GCC ) || !BOOST_WORKAROUND( BOOST_GCC, < 70000 ) + // g++ up to at least 6.2 doesn't like add_reference for some reason or other BOOST_TEST_TRAIT_FALSE((mp_valid)); #if !defined( BOOST_MSVC ) || !BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) // msvc-12.0 gives an internal error here From 01f376b83dcbdd11a6b550f26e1b4c603a52873c Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 20:23:06 +0200 Subject: [PATCH 09/13] Disable std::tuple test on clang++ below 3.8 --- test/tuple_for_each.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/tuple_for_each.cpp b/test/tuple_for_each.cpp index 325a51e..97de4a7 100644 --- a/test/tuple_for_each.cpp +++ b/test/tuple_for_each.cpp @@ -36,6 +36,9 @@ int main() } } +#if defined( __clang_major__ ) && __clang_major__ == 3 && __clang_minor__ < 8 +#else + { std::tuple, std::unique_ptr, std::unique_ptr> tp{ std::unique_ptr(new int(1)), std::unique_ptr(new int(2)), std::unique_ptr(new int(3)) }; @@ -46,6 +49,8 @@ int main() BOOST_TEST_EQ( s, 123 ); } +#endif + { std::pair tp{ 1, 2 }; From 4b426c4fce5f4ac0d9d36a8d32c132aa4feecf77 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 15 Nov 2016 21:34:15 +0200 Subject: [PATCH 10/13] Add more -std variants to .travis.yml; disable constexpr tuple_for_each test on libc++11 --- .travis.yml | 15 +++++++++++++++ test/tuple_for_each_cx.cpp | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index dd2095c..22a0c86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,6 +52,12 @@ matrix: - os: linux env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z + - os: linux env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=c++11 @@ -61,9 +67,18 @@ matrix: - os: linux env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++11 + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++14 + + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++1z + - os: osx env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11 + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 + install: - cd .. - git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root diff --git a/test/tuple_for_each_cx.cpp b/test/tuple_for_each_cx.cpp index 220253c..c3accb4 100644 --- a/test/tuple_for_each_cx.cpp +++ b/test/tuple_for_each_cx.cpp @@ -9,7 +9,9 @@ #include #include -#if defined( BOOST_NO_CXX11_CONSTEXPR ) +// Technically std::tuple isn't constexpr enabled in C++11, but it works with libstdc++ + +#if defined( BOOST_NO_CXX11_CONSTEXPR ) || ( defined( _LIBCPP_VERSION ) && __cplusplus < 201400L ) int main() {} From 4429641551fe4478e3603015ecca3bc4daa0e111 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 16 Nov 2016 02:03:06 +0200 Subject: [PATCH 11/13] Add g++ 4.7, 4.8 to .travis.yml. --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index 22a0c86..2f797e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,8 @@ env: addons: apt: packages: + - g++-4.7 + - g++-4.8 - g++-4.9 - g++-5 - g++-6 @@ -43,6 +45,12 @@ matrix: - env: BOGUS_JOB=true include: + - os: linux + env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=c++11 + + - os: linux + env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=c++11 + - os: linux env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=c++11 From 1f0bff5f997f19c70c40c2baa39c9fcfd9f3c256 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 16 Nov 2016 03:39:16 +0200 Subject: [PATCH 12/13] Revert "Add g++ 4.7, 4.8 to .travis.yml." g++ 4.7 and 4.8 fail the tests and will not be supported by mp11. --- .travis.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2f797e9..22a0c86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,8 +24,6 @@ env: addons: apt: packages: - - g++-4.7 - - g++-4.8 - g++-4.9 - g++-5 - g++-6 @@ -45,12 +43,6 @@ matrix: - env: BOGUS_JOB=true include: - - os: linux - env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=c++11 - - - os: linux - env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=c++11 - - os: linux env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=c++11 From 29d030ac592f0b5027ab58c65db5549e6e49bdf1 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 16 Nov 2016 04:19:37 +0200 Subject: [PATCH 13/13] Add mp_all_of, mp_any_of, mp_none_of. --- include/boost/mp11/algorithm.hpp | 7 +++- include/boost/mp11/function.hpp | 9 +++- test/Jamfile.v2 | 3 ++ test/mp_all_of.cpp | 57 +++++++++++++++++++++++++ test/mp_any_of.cpp | 72 ++++++++++++++++++++++++++++++++ test/mp_none_of.cpp | 72 ++++++++++++++++++++++++++++++++ 6 files changed, 218 insertions(+), 2 deletions(-) create mode 100644 test/mp_all_of.cpp create mode 100644 test/mp_any_of.cpp create mode 100644 test/mp_none_of.cpp diff --git a/include/boost/mp11/algorithm.hpp b/include/boost/mp11/algorithm.hpp index 7c601b4..76f727e 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include @@ -796,8 +796,13 @@ template class L, class... T> struct mp_unique_impl> template using mp_unique = typename detail::mp_unique_impl::type; // mp_all_of +template class P> using mp_all_of = mp_equal_to< mp_count_if, mp_size >; + // mp_none_of +template class P> using mp_none_of = mp_not< mp_count_if >; + // mp_any_of +template class P> using mp_any_of = mp_to_bool< mp_count_if >; } // namespace boost diff --git a/include/boost/mp11/function.hpp b/include/boost/mp11/function.hpp index 68d1494..c78fe29 100644 --- a/include/boost/mp11/function.hpp +++ b/include/boost/mp11/function.hpp @@ -8,11 +8,18 @@ // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt +#include +#include + namespace boost { -// mp_plus // mp_not +template using mp_not = mp_bool< !T::value >; + +// mp_equal_to +template using mp_equal_to = mp_bool< T1::value == T2::value >; + // mp_all // mp_and // mp_any diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 76efec9..1457fdf 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -55,6 +55,9 @@ run mp_reverse.cpp : : : $(REQ) ; run mp_fold.cpp : : : $(REQ) ; run mp_reverse_fold.cpp : : : $(REQ) ; run mp_unique.cpp : : : $(REQ) ; +run mp_all_of.cpp : : : $(REQ) ; +run mp_any_of.cpp : : : $(REQ) ; +run mp_none_of.cpp : : : $(REQ) ; # integral run integral.cpp : : : $(REQ) ; diff --git a/test/mp_all_of.cpp b/test/mp_all_of.cpp new file mode 100644 index 0000000..a19b18e --- /dev/null +++ b/test/mp_all_of.cpp @@ -0,0 +1,57 @@ + +// Copyright 2015, 2016 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + + +#include +#include +#include +#include +#include +#include +#include + +struct X1 {}; + +int main() +{ + using boost::mp_list; + using boost::mp_all_of; + using boost::mp_true; + using boost::mp_false; + + { + using L1 = mp_list<>; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L2 = mp_list; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + } + + { + using L1 = std::tuple<>; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L2 = std::tuple; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + } + + { + using L2 = std::pair; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + } + + return boost::report_errors(); +} diff --git a/test/mp_any_of.cpp b/test/mp_any_of.cpp new file mode 100644 index 0000000..bcf3c19 --- /dev/null +++ b/test/mp_any_of.cpp @@ -0,0 +1,72 @@ + +// Copyright 2015, 2016 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + + +#include +#include +#include +#include +#include +#include +#include + +struct X1 {}; + +int main() +{ + using boost::mp_list; + using boost::mp_any_of; + using boost::mp_true; + using boost::mp_false; + + { + using L1 = mp_list<>; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L2 = mp_list; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L3 = mp_list; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + } + + { + using L1 = std::tuple<>; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L2 = std::tuple; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L3 = std::tuple; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + } + + { + using L2 = std::pair; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L3 = std::pair; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + } + + return boost::report_errors(); +} diff --git a/test/mp_none_of.cpp b/test/mp_none_of.cpp new file mode 100644 index 0000000..1ee4099 --- /dev/null +++ b/test/mp_none_of.cpp @@ -0,0 +1,72 @@ + +// Copyright 2015, 2016 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + + +#include +#include +#include +#include +#include +#include +#include + +struct X1 {}; + +int main() +{ + using boost::mp_list; + using boost::mp_none_of; + using boost::mp_true; + using boost::mp_false; + + { + using L1 = mp_list<>; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L2 = mp_list; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L3 = mp_list; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + } + + { + using L1 = std::tuple<>; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L2 = std::tuple; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L3 = std::tuple; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + } + + { + using L2 = std::pair; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L3 = std::pair; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + } + + return boost::report_errors(); +}