From 6c96720080bbb8b24c8c1e73e6cd7567e2fd19bf Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sat, 17 Feb 2018 17:27:20 +0900 Subject: [PATCH 01/28] CI: Remove build branch restriction --- .travis.yml | 5 ----- appveyor.yml | 5 ----- 2 files changed, 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9db3bca0..37e78e50 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,11 +11,6 @@ os: - linux - osx -branches: - only: - - master - - develop - env: matrix: - BOGUS_JOB=true diff --git a/appveyor.yml b/appveyor.yml index d75679ef..fb161009 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,11 +7,6 @@ version: 1.0.{build}-{branch} shallow_clone: true -branches: - only: - - master - - develop - environment: matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 From 28ea5daccebf0303c3179d404d7ad939519c291b Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sat, 17 Feb 2018 17:45:49 +0900 Subject: [PATCH 02/28] CI: Added more build target --- .travis.yml | 32 ++++++++++++++++++++++++++++++++ appveyor.yml | 17 ++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 37e78e50..fab21c73 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,27 @@ matrix: - os: linux env: TOOLSET=gcc CXXSTD=03,11,1y + - os: linux + env: TOOLSET=gcc-4.4 CXXSTD=03,0x + addons: + apt: + packages: + - g++-4.4 + + - os: linux + env: TOOLSET=gcc-4.5 CXXSTD=03,0x + addons: + apt: + packages: + - g++-4.5 + + - os: linux + env: TOOLSET=gcc-4.6 CXXSTD=03,0x + addons: + apt: + packages: + - g++-4.6 + - os: linux env: TOOLSET=gcc-4.7 CXXSTD=03,11 addons: @@ -148,6 +169,17 @@ matrix: - ubuntu-toolchain-r-test - llvm-toolchain-trusty-4.0 + - os: linux + env: TOOLSET=clang-5.0 CXXSTD=03,11,14,1z,2a + addons: + apt: + packages: + - clang-5.0 + - libstdc++-4.9-dev + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-trusty-5.0 + - os: osx env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z diff --git a/appveyor.yml b/appveyor.yml index fb161009..4613ff61 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,16 +11,31 @@ environment: matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 TOOLSET: msvc-9.0 + CXXSTD: latest # fake - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 TOOLSET: msvc-10.0 + CXXSTD: latest # fake - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 TOOLSET: msvc-11.0 + CXXSTD: latest # fake - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 TOOLSET: msvc-12.0 + CXXSTD: latest # fake - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 TOOLSET: msvc-14.0 + CXXSTD: 14 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + TOOLSET: msvc-14.0 + CXXSTD: latest - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 TOOLSET: msvc-14.1 + CXXSTD: 14 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + TOOLSET: msvc-14.1 + CXXSTD: 17 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + TOOLSET: msvc-14.1 + CXXSTD: latest install: - set BOOST_BRANCH=develop @@ -67,4 +82,4 @@ install: build: off test_script: - - b2 -j%NUMBER_OF_PROCESSORS% --hash libs/fusion/test toolset=%TOOLSET% + - b2 -j%NUMBER_OF_PROCESSORS% --hash libs/fusion/test toolset=%TOOLSET% cxxstd=%CXXSTD% From d0c17119e72238e41fcb688b3e91e04ccedcb824 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sat, 17 Feb 2018 17:46:03 +0900 Subject: [PATCH 03/28] CI: skip known to fail --- test/sequence/define_struct_inline_move.cpp | 6 +++--- test/sequence/define_tpl_struct_inline_move.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/sequence/define_struct_inline_move.cpp b/test/sequence/define_struct_inline_move.cpp index 951f7e4f..3c707404 100644 --- a/test/sequence/define_struct_inline_move.cpp +++ b/test/sequence/define_struct_inline_move.cpp @@ -47,8 +47,8 @@ int main() BOOST_TEST(y.w.value == 42); } - // Older MSVCs don't generate move ctor by default. -#if !(defined(CI_SKIP_KNOWN_FAILURE) && BOOST_WORKAROUND(BOOST_MSVC, < 1900)) + // Older MSVCs and gcc 4.4 don't generate move ctor by default. +#if !(defined(CI_SKIP_KNOWN_FAILURE) && (BOOST_WORKAROUND(BOOST_MSVC, < 1900) || BOOST_WORKAROUND(BOOST_GCC, / 100 == 404))) { ns::value x; ns::value y(std::move(x)); // move @@ -66,7 +66,7 @@ int main() BOOST_TEST(x.w.value == 0); BOOST_TEST(y.w.value == 0); } -#endif // !(ci && msvc < 14.0) +#endif // !(ci && (msvc < 14.0 || gcc 4.4.x)) return boost::report_errors(); } diff --git a/test/sequence/define_tpl_struct_inline_move.cpp b/test/sequence/define_tpl_struct_inline_move.cpp index b95da6f6..39a00079 100644 --- a/test/sequence/define_tpl_struct_inline_move.cpp +++ b/test/sequence/define_tpl_struct_inline_move.cpp @@ -47,8 +47,8 @@ int main() BOOST_TEST(y.w.value == 42); } - // Older MSVCs don't generate move ctor by default. -#if !(defined(CI_SKIP_KNOWN_FAILURE) && BOOST_WORKAROUND(BOOST_MSVC, < 1900)) + // Older MSVCs and gcc 4.4 don't generate move ctor by default. +#if !(defined(CI_SKIP_KNOWN_FAILURE) && (BOOST_WORKAROUND(BOOST_MSVC, < 1900) || BOOST_WORKAROUND(BOOST_GCC, / 100 == 404))) { ns::value x; ns::value y(std::move(x)); // move @@ -66,7 +66,7 @@ int main() BOOST_TEST(x.w.value == 0); BOOST_TEST(y.w.value == 0); } -#endif // !(ci && msvc < 14.0) +#endif // !(ci && (msvc < 14.0 || gcc 4.4.x)) return boost::report_errors(); } From eb0cbbc34789feceac5f152a22bb36396eba0118 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sun, 18 Feb 2018 21:25:51 +0900 Subject: [PATCH 04/28] CI: trusty doesn't provide gcc 4.5 --- .travis.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index fab21c73..0528f49d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,19 +26,12 @@ matrix: env: TOOLSET=gcc CXXSTD=03,11,1y - os: linux - env: TOOLSET=gcc-4.4 CXXSTD=03,0x + env: TOOLSET=gcc-4.4 CXXSTD=98,0x addons: apt: packages: - g++-4.4 - - os: linux - env: TOOLSET=gcc-4.5 CXXSTD=03,0x - addons: - apt: - packages: - - g++-4.5 - - os: linux env: TOOLSET=gcc-4.6 CXXSTD=03,0x addons: From eeeee9bfbbab6a747167b089a88bc9b20ca3ea63 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Mon, 19 Feb 2018 22:40:56 +0900 Subject: [PATCH 05/28] Fixed ambiguous call of hash_value ADL also picks stdext::hash_value which msvc providing. --- test/sequence/hash.hpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/test/sequence/hash.hpp b/test/sequence/hash.hpp index 7dea0a3f..b298f418 100644 --- a/test/sequence/hash.hpp +++ b/test/sequence/hash.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2014 Christoph Weiss + Copyright (c) 2017 Kohei Takahashi 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) @@ -11,24 +12,24 @@ #include #include -void -hash_test() +void hash_test() { - using namespace boost::fusion; + namespace fusion = boost::fusion; + using namespace fusion; const FUSION_SEQUENCE v0(42, 'x', false, "Aurea prima"); const FUSION_SEQUENCE v1(42, 'x', false, "Aurea prima"); - BOOST_TEST(hash_value(v0) == hash_value(v1)); - + BOOST_TEST(fusion::hash_value(v0) == fusion::hash_value(v1)); + const FUSION_SEQUENCE w(41, 'x', false, "Aurea prima"); - BOOST_TEST(hash_value(w) != hash_value(v0)); - + BOOST_TEST(fusion::hash_value(w) != fusion::hash_value(v0)); + const FUSION_SEQUENCE x(42, 'y', false, "Aurea prima"); - BOOST_TEST(hash_value(x) != hash_value(v0)); - + BOOST_TEST(fusion::hash_value(x) != fusion::hash_value(v0)); + const FUSION_SEQUENCE y(42, 'x', true, "Aurea prima"); - BOOST_TEST(hash_value(y) != hash_value(v0)); - + BOOST_TEST(fusion::hash_value(y) != fusion::hash_value(v0)); + const FUSION_SEQUENCE z(42, 'x', false, "quae vindice nullo"); - BOOST_TEST(hash_value(z) != hash_value(v0)); + BOOST_TEST(fusion::hash_value(z) != fusion::hash_value(v0)); } From 25c6334c58c0e7f062be1aff877f6e96bccae65e Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sat, 3 Mar 2018 16:20:08 +0900 Subject: [PATCH 06/28] meta: Update failure toolset name --- meta/explicit-failures-markup.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta/explicit-failures-markup.xml b/meta/explicit-failures-markup.xml index 27438953..c2e6ea97 100644 --- a/meta/explicit-failures-markup.xml +++ b/meta/explicit-failures-markup.xml @@ -9,8 +9,8 @@ - - + + The compiler doesn't generate defaulted move ctor/assgin thus perform copy construction/assginment. Even though such case, From 9de32721749b635ff3e04e690da89cf06602c122 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Tue, 6 Mar 2018 00:40:41 +0900 Subject: [PATCH 07/28] Added workaround for GCC 4.4/c++0x Teh call of ctor is ambiguous since gcc 4.4 allows binding rvalue to lvalue reference. --- .../fusion/container/deque/detail/keyed_element.hpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/include/boost/fusion/container/deque/detail/keyed_element.hpp b/include/boost/fusion/container/deque/detail/keyed_element.hpp index 15b68667..3ab88b92 100644 --- a/include/boost/fusion/container/deque/detail/keyed_element.hpp +++ b/include/boost/fusion/container/deque/detail/keyed_element.hpp @@ -13,6 +13,11 @@ #include #include +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && BOOST_WORKAROUND(BOOST_GCC, / 100 == 404) +#include +#include +#endif + namespace boost { namespace fusion { struct fusion_sequence_tag; @@ -114,8 +119,13 @@ namespace boost { namespace fusion { namespace detail {} #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) +#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 404) + template >::type> +#else + typedef Value Value_; +#endif BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED - keyed_element(Value&& value, Rest&& rest) + keyed_element(Value_&& value, Rest&& rest) : Rest(std::move(rest)) , value_(BOOST_FUSION_FWD_ELEM(Value, value)) {} From c3dec40e72a5d5f5e741e21f02439d8dd990f3e2 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Tue, 13 Mar 2018 23:18:03 +0900 Subject: [PATCH 08/28] Fixed links to support list. Gmane had been closed and not back yet. --- doc/fusion.qbk | 6 ++---- doc/preface.qbk | 7 ++----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/doc/fusion.qbk b/doc/fusion.qbk index 0a24cb32..76f64591 100644 --- a/doc/fusion.qbk +++ b/doc/fusion.qbk @@ -27,10 +27,8 @@ [def __tuple__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple]] [def __tr1__tuple__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1403.pdf TR1 Tuple]] [def __boost_tools__ [@http://www.boost.org/tools/index.html Boost Tools]] -[def __spirit_list__ [@https://lists.sourceforge.net/lists/listinfo/spirit-general Spirit Mailing List]] -[def __spirit_general__ [@news://news.gmane.org/gmane.comp.spirit.general Spirit General NNTP news portal]] -[def __gmane__ [@http://www.gmane.org Gmane]] -[def __mlist_archive__ [@http://news.gmane.org/gmane.comp.parsers.spirit.general]] +[def __spirit_list__ [@https://sourceforge.net/projects/spirit/lists/spirit-general Spirit Mailing List]] +[def __list_archive__ [@https://sourceforge.net/p/spirit/mailman/spirit-general/ archive]] [def __jaakko_jarvi__ [@http://www.boost.org/people/jaakko_jarvi.htm Jaakko Jarvi]] [def __david_abrahams__ [@http://www.boost.org/people/dave_abrahams.htm David Abrahams]] [def __the_forwarding_problem__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm The Forwarding Problem]] diff --git a/doc/preface.qbk b/doc/preface.qbk index 2fff963a..a6ab573f 100644 --- a/doc/preface.qbk +++ b/doc/preface.qbk @@ -61,11 +61,8 @@ tool. QuickBook can be found in the __boost_tools__. [heading Support] Please direct all questions to Spirit's mailing list. You can subscribe to the -__spirit_list__. The mailing list has a searchable archive. A search link to -this archive is provided in __spirit__'s home page. You may also read and post -messages to the mailing list through __spirit_general__ (thanks to __gmane__). -The news group mirrors the mailing list. Here is a link to the archives: -__mlist_archive__. +__spirit_list__. The mailing list has a searchable archive. Here is a link to +the archives: __list_archive__. [endsect] From d5bd71c8866a22c1c375e6acc9dc3dfd2e86c96b Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 14 Mar 2018 00:51:48 +0900 Subject: [PATCH 09/28] Update dead/moved links --- doc/fusion.qbk | 39 ++++++++++++++++++++------------------- doc/references.qbk | 17 +++++++++-------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/doc/fusion.qbk b/doc/fusion.qbk index 76f64591..6d6987d5 100644 --- a/doc/fusion.qbk +++ b/doc/fusion.qbk @@ -2,6 +2,7 @@ Copyright (C) 2001-2011 Joel de Guzman Copyright (C) 2006 Dan Marsden Copyright (C) 2010 Christopher Schmidt + Copyright (C) 2018 Kohei Takahashi Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -20,11 +21,11 @@ ] ] -[def __spirit__ [@http://spirit.sourceforge.net Spirit]] -[def __phoenix__ [@http://www.boost.org/libs/phoenix/index.html Phoenix]] -[def __mpl__ [@http://www.boost.org/libs/mpl/index.html MPL]] +[def __spirit__ [@http://boost-spirit.com/home/ Spirit]] +[def __phoenix__ [@http://www.boost.org/libs/phoenix Phoenix]] +[def __mpl__ [@http://www.boost.org/libs/mpl MPL]] [def __stl__ [@http://en.wikipedia.org/wiki/Standard_Template_Library STL]] -[def __tuple__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple]] +[def __tuple__ [@http://www.boost.org/libs/tuple Boost.Tuple]] [def __tr1__tuple__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1403.pdf TR1 Tuple]] [def __boost_tools__ [@http://www.boost.org/tools/index.html Boost Tools]] [def __spirit_list__ [@https://sourceforge.net/projects/spirit/lists/spirit-general Spirit Mailing List]] @@ -33,24 +34,24 @@ [def __david_abrahams__ [@http://www.boost.org/people/dave_abrahams.htm David Abrahams]] [def __the_forwarding_problem__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm The Forwarding Problem]] -[def __boost_any__ [@http://www.boost.org/doc/html/any.html Boost.Any]] +[def __boost_any__ [@http://www.boost.org/libs/any Boost.Any Library]] [def __new_iterator_concepts__ [@http://www.boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts]] -[def __boost_array_library__ [@http://www.boost.org/doc/html/array.html Boost.Array Library]] -[def __boost_variant_library__ [@http://www.boost.org/doc/html/variant.html Boost.Variant Library]] -[def __boost_tuple_library__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple Library]] -[def __boost_ref__ [@http://www.boost.org/doc/html/ref.html Boost.Ref]] -[def __boost_ref_call__ [@http://www.boost.org/doc/html/ref.html `ref`]] -[def __boost_result_of__ [@http://www.boost.org/libs/utility/utility.htm#result_of Boost.ResultOf]] +[def __boost_array_library__ [@http://www.boost.org/libs/array Boost.Array Library]] +[def __boost_variant_library__ [@http://www.boost.org/libs/variant Boost.Variant Library]] +[def __boost_tuple_library__ [@http://www.boost.org/libs/tuple Boost.Tuple Library]] +[def __boost_ref__ [@http://www.boost.org/libs/core/ref.html Ref utility]] +[def __boost_ref_call__ [@http://www.boost.org/libs/core/ref.html `ref`]] +[def __boost_result_of__ [@http://www.boost.org/libs/utility/utility.htm#result_of ResultOf utility]] [def __boost_result_of_call__ [@http://www.boost.org/libs/utility/utility.htm#result_of `boost::result_of`]] -[def __boost_enable_if__ [@http://www.boost.org/libs/utility/enable_if.html Boost.EnableIf utility]] -[def __boost_shared_ptr_call__ [@http://www.boost.org/libs/smart_ptr/shared_ptr.htm `boost::shared_ptr`]] -[def __boost_func_forward__ [@http://www.boost.org/libs/functional/forward/doc/html/index.html Boost.Functional/Forward]] -[def __boost_func_factory__ [@http://www.boost.org/libs/functional/factory/doc/html/index.html Boost.Functional/Factory]] -[def __boost_func_hash__ [@http://www.boost.org/doc/html/hash.html Boost.Functional/Hash]] -[def __std_pair_doc__ [@http://www.sgi.com/tech/stl/pair.html `std::pair`]] +[def __boost_enable_if__ [@http://www.boost.org/libs/core/doc/html/core/enable_if.html EnableIf utility]] +[def __boost_shared_ptr_call__ [@http://www.boost.org/libs/smart_ptr#shared_ptr `boost::shared_ptr`]] +[def __boost_func_forward__ [@http://www.boost.org/libs/functional/forward Boost.Functional/Forward Library]] +[def __boost_func_factory__ [@http://www.boost.org/libs/functional/factory Boost.Functional/Factory Library]] +[def __boost_func_hash__ [@http://www.boost.org/doc/html/hash.html Boost.ContainerHash Library]] +[def __std_pair_doc__ [@http://en.cppreference.com/w/cpp/utility/pair `std::pair`]] [def __std_tuple_doc__ [@http://en.cppreference.com/w/cpp/utility/tuple `std::tuple`]] -[def __std_plus_doc__ [@http://www.sgi.com/tech/stl/plus.html `std::plus`]] -[def __std_minus_doc__ [@http://www.sgi.com/tech/stl/minus.html `std::minus`]] +[def __std_plus_doc__ [@http://en.cppreference.com/w/cpp/utility/functional/plus `std::plus`]] +[def __std_minus_doc__ [@http://en.cppreference.com/w/cpp/utility/functional/minus `std::minus`]] [def __mpl_integral_constant__ [@http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html MPL Integral Constant]] [def __mpl_boolean_constant__ [@http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html MPL Boolean Constant]] diff --git a/doc/references.qbk b/doc/references.qbk index d0d63019..a07815d4 100644 --- a/doc/references.qbk +++ b/doc/references.qbk @@ -1,6 +1,7 @@ [/============================================================================== Copyright (C) 2001-2011 Joel de Guzman Copyright (C) 2006 Dan Marsden + Copyright (C) 2018 Kohei Takahashi Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -8,20 +9,20 @@ ===============================================================================/] [section References] -# [@http://boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts], +# [@http://www.boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts], David Abrahams, Jeremy Siek, Thomas Witt, 2004-11-01. -# [@http://boost.org/libs/tuple/doc/tuple_users_guide.html The Boost Tuple Library], +# [@http://www.boost.org/libs/tuple The Boost Tuple Library], Jaakko Jarvi, 2001. -# [@http://www.boost.org/libs/spirit/ Spirit Parser Library], +# [@http://www.boost.org/libs/spirit Spirit Parser Library], Joel de Guzman, 2001-2006. -# [@http://www.boost.org/libs/mpl/ The Boost MPL Library], +# [@http://www.boost.org/libs/mpl The Boost MPL Library], Aleksey Gurtovoy and David Abrahams, 2002-2004. -# [@http://www.boost.org/doc/html/array.html Boost Array], +# [@http://www.boost.org/libs/array The Boost Array Library], Nicolai Josuttis, 2002-2004. -# [@http://www.sgi.com/tech/stl/ Standard Template Library Programmer's Guide], - Hewlett-Packard Company, 1994. -# [@http://www.boost.org/doc/html/ref.html Boost.Ref], +# [@http://www.boost.org/libs/core/ref.html Boost.Core / Ref utility], Jaakko Jarvi, Peter Dimov, Douglas Gregor, Dave Abrahams, 1999-2002. +# [@http://www.boost.org/libs/hana The Boost Hana Library], + Louis Dionne, 2017. [endsect] From 4734cf4a13c622ac92b777a33452558a4a06d26e Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 14 Mar 2018 14:41:43 +0900 Subject: [PATCH 10/28] Fixed detail::and test it should be used mpl/assert instead of runtime facility. --- test/support/and.cpp | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/test/support/and.cpp b/test/support/and.cpp index b657ead5..604a68d7 100644 --- a/test/support/and.cpp +++ b/test/support/and.cpp @@ -11,24 +11,18 @@ # error "does not meet requirements" #endif -#include #include #include -#include +#include -int main() { - using namespace boost; - using namespace boost::fusion::detail; - - BOOST_TEST((and_<>::value)); - BOOST_TEST(!(and_::value)); - BOOST_TEST((and_::value)); - BOOST_TEST(!(and_::value)); - BOOST_TEST((and_::value)); - BOOST_TEST(!(and_::value)); - BOOST_TEST((and_::value)); - BOOST_TEST((and_::value)); - - return boost::report_errors(); -} +using namespace boost; +using namespace boost::fusion::detail; +BOOST_MPL_ASSERT((and_<>)); +BOOST_MPL_ASSERT_NOT((and_)); +BOOST_MPL_ASSERT((and_)); +BOOST_MPL_ASSERT_NOT((and_)); +BOOST_MPL_ASSERT((and_)); +BOOST_MPL_ASSERT_NOT((and_)); +BOOST_MPL_ASSERT((and_)); +BOOST_MPL_ASSERT((and_)); From 2aea153be0d56781866052a7948cc1979e1563a4 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 14 Mar 2018 14:53:07 +0900 Subject: [PATCH 11/28] Use fold expression to improbe compile speed --- include/boost/fusion/support/detail/and.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/boost/fusion/support/detail/and.hpp b/include/boost/fusion/support/detail/and.hpp index 1b310dda..b45fb0e3 100644 --- a/include/boost/fusion/support/detail/and.hpp +++ b/include/boost/fusion/support/detail/and.hpp @@ -15,6 +15,7 @@ #endif namespace boost { namespace fusion { namespace detail { +#if defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS) template struct and_impl : false_type {}; @@ -34,6 +35,10 @@ namespace boost { namespace fusion { namespace detail { recursive. */ template struct and_ : and_impl1 {}; +#else + template + struct and_ : integral_constant {}; +#endif }}} #endif // FUSION_AND_07152016_1625 From d8f608c8f1c2797ff26cacf0aaae437845b638ae Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 14 Mar 2018 14:53:30 +0900 Subject: [PATCH 12/28] Move is_native_fusion_sequence to detail in order to reuse it in is_mpl_sequence --- .../fusion/support/detail/is_mpl_sequence.hpp | 6 ++--- .../detail/is_native_fusion_sequence.hpp | 27 +++++++++++++++++++ include/boost/fusion/support/is_sequence.hpp | 13 ++------- 3 files changed, 31 insertions(+), 15 deletions(-) create mode 100644 include/boost/fusion/support/detail/is_native_fusion_sequence.hpp diff --git a/include/boost/fusion/support/detail/is_mpl_sequence.hpp b/include/boost/fusion/support/detail/is_mpl_sequence.hpp index 24b86624..16b6db12 100644 --- a/include/boost/fusion/support/detail/is_mpl_sequence.hpp +++ b/include/boost/fusion/support/detail/is_mpl_sequence.hpp @@ -9,19 +9,17 @@ #define FUSION_DETAIL_IS_MPL_SEQUENCE_29122006_1105 #include -#include +#include #include #include #include -#include -#include namespace boost { namespace fusion { namespace detail { template struct is_mpl_sequence : mpl::and_< - mpl::not_, is_convertible > > + mpl::not_ > , mpl::is_sequence > {}; }}} diff --git a/include/boost/fusion/support/detail/is_native_fusion_sequence.hpp b/include/boost/fusion/support/detail/is_native_fusion_sequence.hpp new file mode 100644 index 00000000..189c784d --- /dev/null +++ b/include/boost/fusion/support/detail/is_native_fusion_sequence.hpp @@ -0,0 +1,27 @@ +/*============================================================================= + Copyright (c) 2018 Kohei Takahashi + + 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_FUSION_IS_NATIVE_FUSION_SEQUENCE +#define BOOST_FUSION_IS_NATIVE_FUSION_SEQUENCE + +#include +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + template + struct is_native_fusion_sequence + : mpl::and_< + is_complete + , is_convertible + > + {}; +}}} + +#endif diff --git a/include/boost/fusion/support/is_sequence.hpp b/include/boost/fusion/support/is_sequence.hpp index af7c84e1..95a9423f 100644 --- a/include/boost/fusion/support/is_sequence.hpp +++ b/include/boost/fusion/support/is_sequence.hpp @@ -10,13 +10,10 @@ #include #include #include -#include +#include #include #include -#include -#include #include -#include namespace boost { namespace fusion { @@ -69,13 +66,7 @@ namespace boost { namespace fusion > {}; - template - struct is_native_fusion_sequence - : mpl::and_< - is_complete, - is_convertible - > - {}; + using detail::is_native_fusion_sequence; } }} From 11a3f250b82e9aa4525c5e6923531028d58b1950 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Thu, 15 Mar 2018 19:56:07 +0900 Subject: [PATCH 13/28] Remove unused header --- .../boost/fusion/support/detail/unknown_key.hpp | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 include/boost/fusion/support/detail/unknown_key.hpp diff --git a/include/boost/fusion/support/detail/unknown_key.hpp b/include/boost/fusion/support/detail/unknown_key.hpp deleted file mode 100644 index 9466b9c0..00000000 --- a/include/boost/fusion/support/detail/unknown_key.hpp +++ /dev/null @@ -1,16 +0,0 @@ -/*============================================================================= - Copyright (c) 2001-2011 Joel de Guzman - - 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(FUSION_UNKNOWN_KEY_09242005_1219) -#define FUSION_UNKNOWN_KEY_09242005_1219 - -namespace boost { namespace fusion { namespace detail -{ - template - struct unknown_key {}; -}}} - -#endif From e3b053f9695a7e85021c04920b3afaa07f2b1225 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Thu, 15 Mar 2018 20:49:38 +0900 Subject: [PATCH 14/28] Remove detail metafunctions to simplify template --- include/boost/fusion/support/category_of.hpp | 6 ++++-- .../fusion/support/detail/category_of.hpp | 19 ------------------- .../boost/fusion/support/detail/is_view.hpp | 19 ------------------- include/boost/fusion/support/is_view.hpp | 6 +++--- 4 files changed, 7 insertions(+), 43 deletions(-) delete mode 100644 include/boost/fusion/support/detail/category_of.hpp delete mode 100644 include/boost/fusion/support/detail/is_view.hpp diff --git a/include/boost/fusion/support/category_of.hpp b/include/boost/fusion/support/category_of.hpp index 92b0ea1b..7397c45a 100644 --- a/include/boost/fusion/support/category_of.hpp +++ b/include/boost/fusion/support/category_of.hpp @@ -8,7 +8,6 @@ #define FUSION_CATEGORY_OF_07202005_0308 #include -#include #include #include @@ -44,7 +43,10 @@ namespace boost { namespace fusion struct category_of_impl { template - struct apply : detail::fusion_category_of {}; + struct apply + { + typedef typename T::category type; + }; }; template <> diff --git a/include/boost/fusion/support/detail/category_of.hpp b/include/boost/fusion/support/detail/category_of.hpp deleted file mode 100644 index e7ac44e5..00000000 --- a/include/boost/fusion/support/detail/category_of.hpp +++ /dev/null @@ -1,19 +0,0 @@ -/*============================================================================= - Copyright (c) 2001-2011 Joel de Guzman - - 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(FUSION_CATEGORY_OF_07212005_1025) -#define FUSION_CATEGORY_OF_07212005_1025 - -namespace boost { namespace fusion { namespace detail -{ - template - struct fusion_category_of - { - typedef typename T::category type; - }; -}}} - -#endif diff --git a/include/boost/fusion/support/detail/is_view.hpp b/include/boost/fusion/support/detail/is_view.hpp deleted file mode 100644 index c518dfc4..00000000 --- a/include/boost/fusion/support/detail/is_view.hpp +++ /dev/null @@ -1,19 +0,0 @@ -/*============================================================================= - Copyright (c) 2001-2011 Joel de Guzman - - 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(FUSION_IS_VIEW_03202006_0018) -#define FUSION_IS_VIEW_03202006_0018 - -namespace boost { namespace fusion { namespace detail -{ - template - struct fusion_is_view - { - typedef typename T::is_view type; - }; -}}} - -#endif diff --git a/include/boost/fusion/support/is_view.hpp b/include/boost/fusion/support/is_view.hpp index c54e60e1..a6ca7259 100644 --- a/include/boost/fusion/support/is_view.hpp +++ b/include/boost/fusion/support/is_view.hpp @@ -9,7 +9,6 @@ #include #include -#include #include namespace boost { namespace fusion @@ -28,8 +27,9 @@ namespace boost { namespace fusion { template struct apply - : detail::fusion_is_view - {}; + { + typedef typename T::is_view type; + }; }; template <> From e962c1abb5312df23868a83ac66dd9da9773ca5f Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 18 Apr 2018 22:31:35 +0900 Subject: [PATCH 15/28] Fixed vector compile error with C-style array --- .../boost/fusion/container/vector/detail/value_at_impl.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/boost/fusion/container/vector/detail/value_at_impl.hpp b/include/boost/fusion/container/vector/detail/value_at_impl.hpp index a2b9b2f6..d7270aed 100644 --- a/include/boost/fusion/container/vector/detail/value_at_impl.hpp +++ b/include/boost/fusion/container/vector/detail/value_at_impl.hpp @@ -23,6 +23,7 @@ /////////////////////////////////////////////////////////////////////////////// #include #include +#include namespace boost { namespace fusion { @@ -35,7 +36,7 @@ namespace boost { namespace fusion template static inline BOOST_FUSION_GPU_ENABLED - U value_at_impl(store const volatile*); + mpl::identity value_at_impl(store const volatile*); } namespace extension @@ -49,8 +50,8 @@ namespace boost { namespace fusion template struct apply { - typedef - decltype(vector_detail::value_at_impl(boost::declval())) + typedef typename + decltype(vector_detail::value_at_impl(boost::declval()))::type type; }; }; From 96b2e51828e2df9bf6540a62687b9e62bf4039c8 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 18 Apr 2018 22:33:36 +0900 Subject: [PATCH 16/28] Added test for #176 --- test/Jamfile | 1 + test/sequence/github-176.cpp | 50 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 test/sequence/github-176.cpp diff --git a/test/Jamfile b/test/Jamfile index a61239d0..9492e83f 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -237,6 +237,7 @@ project [ run sequence/ref_vector.cpp ] [ run sequence/flatten_view.cpp ] [ compile sequence/github-159.cpp ] + [ run sequence/github-176.cpp ] [ compile sequence/size.cpp ] diff --git a/test/sequence/github-176.cpp b/test/sequence/github-176.cpp new file mode 100644 index 00000000..553e83c2 --- /dev/null +++ b/test/sequence/github-176.cpp @@ -0,0 +1,50 @@ +/*============================================================================= + Copyright (c) 2018 Kohei Takahashi + + 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 + +template +void test_at() +{ + Sequence seq; + + // zero initialized + BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 0); + BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 0); + BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 0); + + int (&arr)[3] = boost::fusion::deref(boost::fusion::begin(seq)); + + arr[0] = 2; + arr[1] = 4; + arr[2] = 6; + + BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2); + BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 4); + BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6); + + boost::fusion::at_c<0>(seq)[1] = 42; + + BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2); + BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 42); + BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6); +} + +int main() +{ + using namespace boost::fusion; + + test_at >(); + test_at >(); + test_at >(); + test_at >(); +} From dd695c1dbd07476d324fbd7973008fbafc129748 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 18 Apr 2018 22:38:09 +0900 Subject: [PATCH 17/28] Fixed a compile error bug similar to previous vector's one --- include/boost/fusion/container/map/detail/map_impl.hpp | 6 +----- .../fusion/container/map/detail/value_at_key_impl.hpp | 7 ++----- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/include/boost/fusion/container/map/detail/map_impl.hpp b/include/boost/fusion/container/map/detail/map_impl.hpp index c62145ba..360c5d09 100644 --- a/include/boost/fusion/container/map/detail/map_impl.hpp +++ b/include/boost/fusion/container/map/detail/map_impl.hpp @@ -125,11 +125,7 @@ namespace boost { namespace fusion { namespace detail } BOOST_FUSION_GPU_ENABLED - value_type get_val(mpl::identity); - BOOST_FUSION_GPU_ENABLED - pair_type get_val(mpl::int_); - BOOST_FUSION_GPU_ENABLED - value_type get_val(mpl::identity) const; + mpl::identity get_val(mpl::identity) const; BOOST_FUSION_GPU_ENABLED pair_type get_val(mpl::int_) const; diff --git a/include/boost/fusion/container/map/detail/value_at_key_impl.hpp b/include/boost/fusion/container/map/detail/value_at_key_impl.hpp index 94d2da47..10873087 100644 --- a/include/boost/fusion/container/map/detail/value_at_key_impl.hpp +++ b/include/boost/fusion/container/map/detail/value_at_key_impl.hpp @@ -8,9 +8,6 @@ #define BOOST_FUSION_MAP_DETAIL_VALUE_AT_KEY_IMPL_02042013_0821 #include -#include -#include -#include #include #include @@ -29,8 +26,8 @@ namespace boost { namespace fusion template struct apply { - typedef - decltype(boost::declval().get_val(mpl::identity())) + typedef typename + decltype(boost::declval().get_val(mpl::identity()))::type type; }; }; From 757541f9d2f22faebf18665c3b6fe03203b428cf Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 18 Apr 2018 22:39:55 +0900 Subject: [PATCH 18/28] Updated c-style array test for associative container --- test/sequence/github-176.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/test/sequence/github-176.cpp b/test/sequence/github-176.cpp index 553e83c2..82960e9a 100644 --- a/test/sequence/github-176.cpp +++ b/test/sequence/github-176.cpp @@ -6,9 +6,12 @@ ==============================================================================*/ #include +#include #include #include #include +#include +#include #include #include @@ -39,6 +42,36 @@ void test_at() BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6); } +template inline T& value(T& v) { return v; } +template inline T& value(boost::fusion::pair& v) { return v.second; } + +template +void test_at_key() +{ + Sequence seq; + + // zero initialized + BOOST_TEST(boost::fusion::at_key(seq)[0] == 0); + BOOST_TEST(boost::fusion::at_key(seq)[1] == 0); + BOOST_TEST(boost::fusion::at_key(seq)[2] == 0); + + int (&arr)[3] = value(boost::fusion::deref(boost::fusion::begin(seq))); + + arr[0] = 2; + arr[1] = 4; + arr[2] = 6; + + BOOST_TEST(boost::fusion::at_key(seq)[0] == 2); + BOOST_TEST(boost::fusion::at_key(seq)[1] == 4); + BOOST_TEST(boost::fusion::at_key(seq)[2] == 6); + + boost::fusion::at_key(seq)[1] = 42; + + BOOST_TEST(boost::fusion::at_key(seq)[0] == 2); + BOOST_TEST(boost::fusion::at_key(seq)[1] == 42); + BOOST_TEST(boost::fusion::at_key(seq)[2] == 6); +} + int main() { using namespace boost::fusion; @@ -47,4 +80,7 @@ int main() test_at >(); test_at >(); test_at >(); + + test_at_key >(); + test_at_key > >(); } From a273cd8131a5b5ebd25282e8c79f68e25a5f2610 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Thu, 19 Apr 2018 00:21:41 +0900 Subject: [PATCH 19/28] Added workaround for msvc-14.x --- .../container/map/detail/value_at_key_impl.hpp | 8 ++++---- .../container/vector/detail/value_at_impl.hpp | 9 ++++----- include/boost/fusion/support/config.hpp | 14 +++++++++++++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/include/boost/fusion/container/map/detail/value_at_key_impl.hpp b/include/boost/fusion/container/map/detail/value_at_key_impl.hpp index 10873087..da6259e6 100644 --- a/include/boost/fusion/container/map/detail/value_at_key_impl.hpp +++ b/include/boost/fusion/container/map/detail/value_at_key_impl.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2001-2013 Joel de Guzman + Copyright (c) 2018 Kohei Takahashi 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) @@ -8,7 +9,6 @@ #define BOOST_FUSION_MAP_DETAIL_VALUE_AT_KEY_IMPL_02042013_0821 #include -#include #include namespace boost { namespace fusion @@ -26,9 +26,9 @@ namespace boost { namespace fusion template struct apply { - typedef typename - decltype(boost::declval().get_val(mpl::identity()))::type - type; + typedef typename BOOST_FUSION_IDENTIFIED_TYPE(( + boost::declval().get_val(mpl::identity()) + )) type; }; }; } diff --git a/include/boost/fusion/container/vector/detail/value_at_impl.hpp b/include/boost/fusion/container/vector/detail/value_at_impl.hpp index d7270aed..a2dd5fcd 100644 --- a/include/boost/fusion/container/vector/detail/value_at_impl.hpp +++ b/include/boost/fusion/container/vector/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2014 Kohei Takahashi + Copyright (c) 2014,2018 Kohei Takahashi 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) @@ -7,7 +7,6 @@ #ifndef FUSION_VALUE_AT_IMPL_16122014_1641 #define FUSION_VALUE_AT_IMPL_16122014_1641 -#include #include #include @@ -50,9 +49,9 @@ namespace boost { namespace fusion template struct apply { - typedef typename - decltype(vector_detail::value_at_impl(boost::declval()))::type - type; + typedef typename BOOST_FUSION_IDENTIFIED_TYPE(( + vector_detail::value_at_impl(boost::declval()) + )) type; }; }; } diff --git a/include/boost/fusion/support/config.hpp b/include/boost/fusion/support/config.hpp index 23554531..65fe2f35 100644 --- a/include/boost/fusion/support/config.hpp +++ b/include/boost/fusion/support/config.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 2014 Eric Niebler - Copyright (c) 2014 Kohei Takahashi + Copyright (c) 2014,2018 Kohei Takahashi 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) @@ -96,4 +96,16 @@ namespace std #define BOOST_FUSION_CONSTEXPR_THIS BOOST_CONSTEXPR #endif + +// Workaround for compiler which doesn't compile decltype(expr)::type. +// It expects decltype(expr) deduced as mpl::identity. +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) +# include +# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \ + boost::mpl::identity::type::type +#else +# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \ + decltype parenthesized_expr ::type +#endif + #endif From 7443cb110177331bc16ba02f50d84a5eef7bbf78 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Fri, 20 Apr 2018 13:04:02 +0900 Subject: [PATCH 20/28] Changed availability condition to what Boost.TT providing --- test/sequence/traits.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/sequence/traits.hpp b/test/sequence/traits.hpp index b409936e..2bff18d8 100644 --- a/test/sequence/traits.hpp +++ b/test/sequence/traits.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (C) 2016 Lee Clagett + Copyright (C) 2018 Kohei Takahashi 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) @@ -38,9 +39,7 @@ bool is_convertible(bool has_conversion) } // is_constructible has a few requirements -#if !defined(BOOST_NO_CXX11_DECLTYPE) && \ - !defined(BOOST_NO_CXX11_TEMPLATES) && \ - !defined(BOOST_NO_SFINAE_EXPR) +#ifdef BOOST_TT_IS_CONSTRUCTIBLE_CONFORMING #define FUSION_TEST_HAS_CONSTRUCTIBLE From a95a838779db7dfd35bc6807a94a5f65d735ba5e Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sat, 21 Apr 2018 18:22:24 +0900 Subject: [PATCH 21/28] Added workaround to test is_constructible on GCC < 4.7 always fail to test non unary ctor --- test/sequence/traits.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/sequence/traits.hpp b/test/sequence/traits.hpp index 2bff18d8..3684604e 100644 --- a/test/sequence/traits.hpp +++ b/test/sequence/traits.hpp @@ -87,7 +87,9 @@ void test_constructible() BOOST_TEST(( is_constructible, convertible>(true) )); - + + // boost::is_constructible always fail to test ctor which takes 2 or more arguments on GCC 4.7. +#if !BOOST_WORKAROUND(BOOST_GCC, < 40700) BOOST_TEST(( is_constructible, int, int>(true) )); @@ -130,6 +132,7 @@ void test_constructible() FUSION_SEQUENCE, convertible, convertible >(true) )); +#endif // !(gcc < 4.7) } #endif // is_constructible is available From e818089a9182ee231fceb13d7e8301a3e471dbf0 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sat, 21 Apr 2018 19:18:09 +0900 Subject: [PATCH 22/28] likewise --- test/sequence/tuple_traits.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/sequence/tuple_traits.cpp b/test/sequence/tuple_traits.cpp index 6d18c231..f065504a 100644 --- a/test/sequence/tuple_traits.cpp +++ b/test/sequence/tuple_traits.cpp @@ -65,10 +65,13 @@ main() BOOST_TEST((is_constructible, int, int>(false))); BOOST_TEST((is_constructible< tuple >(true))); + // boost::is_constructible always fail to test ctor which takes 2 or more arguments on GCC 4.7. +#if !BOOST_WORKAROUND(BOOST_GCC, < 40700) BOOST_TEST((is_constructible, int, int>(true))); BOOST_TEST(( is_constructible, int, int>(true) )); +#endif // !(gcc < 4.7) BOOST_TEST((is_constructible, int, int>(false))); BOOST_TEST((is_constructible, int, int>(false))); BOOST_TEST(( From 3b8fb67b52ad02ca4d5ba379661f0c19b23e732c Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sun, 22 Apr 2018 03:44:57 +0900 Subject: [PATCH 23/28] Update WA condition --- include/boost/fusion/support/config.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/fusion/support/config.hpp b/include/boost/fusion/support/config.hpp index 65fe2f35..5a0f572e 100644 --- a/include/boost/fusion/support/config.hpp +++ b/include/boost/fusion/support/config.hpp @@ -99,7 +99,7 @@ namespace std // Workaround for compiler which doesn't compile decltype(expr)::type. // It expects decltype(expr) deduced as mpl::identity. -#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || BOOST_WORKAROUND(BOOST_GCC, < 40700) # include # define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \ boost::mpl::identity::type::type From e8da43a5395bd9712bee186f3250b3d43ff43cb0 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Thu, 26 Apr 2018 00:02:57 +0900 Subject: [PATCH 24/28] Added workaround for gcc 4.6 with C array --- include/boost/fusion/container/list/cons.hpp | 4 ++++ test/sequence/github-176.cpp | 3 +++ 2 files changed, 7 insertions(+) diff --git a/include/boost/fusion/container/list/cons.hpp b/include/boost/fusion/container/list/cons.hpp index 0dd91b0c..dd7f8873 100644 --- a/include/boost/fusion/container/list/cons.hpp +++ b/include/boost/fusion/container/list/cons.hpp @@ -70,6 +70,10 @@ namespace boost { namespace fusion cons(cons const& rhs) : car(rhs.car), cdr(rhs.cdr) {} +#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 406) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) + // Workaround for `array used as initializer` compile error on gcc 4.6 w/ c++0x. + template +#endif BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED cons(cons const& rhs) : car(rhs.car), cdr(rhs.cdr) {} diff --git a/test/sequence/github-176.cpp b/test/sequence/github-176.cpp index 82960e9a..3301220d 100644 --- a/test/sequence/github-176.cpp +++ b/test/sequence/github-176.cpp @@ -81,6 +81,9 @@ int main() test_at >(); test_at >(); +#if !BOOST_WORKAROUND(BOOST_GCC, / 100 == 406) || defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) + // FIXME: gcc 4.6 w/ c++0x doesn't like set with array... test_at_key >(); +#endif test_at_key > >(); } From 38aa3705d036c8841b6790dfe60ece4310efaf6f Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Fri, 27 Apr 2018 12:37:00 +0900 Subject: [PATCH 25/28] Added test for unused_type --- test/Jamfile | 1 + test/support/unused.cpp | 95 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 test/support/unused.cpp diff --git a/test/Jamfile b/test/Jamfile index a61239d0..3a358045 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -266,6 +266,7 @@ project [ compile support/and.cpp : [ requires cxx11_variadic_templates ] ] [ compile support/tag_of.cpp ] + [ compile support/unused.cpp ] # [ compile-fail xxx.cpp ] diff --git a/test/support/unused.cpp b/test/support/unused.cpp new file mode 100644 index 00000000..28d2ffda --- /dev/null +++ b/test/support/unused.cpp @@ -0,0 +1,95 @@ +/*============================================================================= + Copyright (c) 2018 Kohei Takahashi + + 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 +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES +#include +#endif + +struct T { }; + +void unused_construction() +{ + boost::fusion::unused_type dephault; + + boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED parenthesis(); +#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX + boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED brace{}; + boost::fusion::unused_type BOOST_ATTRIBUTE_UNUSED list_copy = {}; +#endif + + boost::fusion::unused_type copy_copy BOOST_ATTRIBUTE_UNUSED = dephault; + boost::fusion::unused_type copy_direct BOOST_ATTRIBUTE_UNUSED (dephault); +#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX + boost::fusion::unused_type copy_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {dephault}; + boost::fusion::unused_type copy_direct_brace BOOST_ATTRIBUTE_UNUSED {dephault}; +#endif + +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + boost::fusion::unused_type move_copy BOOST_ATTRIBUTE_UNUSED = std::move(dephault); + boost::fusion::unused_type move_direct BOOST_ATTRIBUTE_UNUSED (std::move(dephault)); +#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX + boost::fusion::unused_type move_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {std::move(dephault)}; + boost::fusion::unused_type move_direct_brace BOOST_ATTRIBUTE_UNUSED {std::move(dephault)}; +#endif +#endif + + + T value; + + boost::fusion::unused_type T_copy_copy BOOST_ATTRIBUTE_UNUSED = value; + boost::fusion::unused_type T_copy_direct BOOST_ATTRIBUTE_UNUSED (value); +#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX + boost::fusion::unused_type T_copy_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {value}; + boost::fusion::unused_type T_copy_direct_brace BOOST_ATTRIBUTE_UNUSED {value}; +#endif + +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + boost::fusion::unused_type T_move_copy BOOST_ATTRIBUTE_UNUSED = std::move(value); + boost::fusion::unused_type T_move_direct BOOST_ATTRIBUTE_UNUSED (std::move(value)); +#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX + boost::fusion::unused_type T_move_copy_brace_direct BOOST_ATTRIBUTE_UNUSED = {std::move(value)}; + boost::fusion::unused_type T_move_direct_brace BOOST_ATTRIBUTE_UNUSED {std::move(value)}; +#endif +#endif +} + +void unused_assignment() +{ + boost::fusion::unused_type val1, val2; + + val1 = val2; +#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX + val1 = {}; +#endif +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + val1 = std::move(val2); +#endif + + + T value; + + val1 = value; +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + val1 = std::move(value); +#endif +} + +boost::type_traits::yes_type test_unused(boost::fusion::detail::unused_only const&); +boost::type_traits::no_type test_unused(...); + +void only_unused() +{ + BOOST_STATIC_ASSERT((sizeof(test_unused(boost::fusion::unused)) == sizeof(boost::type_traits::yes_type))); + BOOST_STATIC_ASSERT((sizeof(test_unused(0)) == sizeof(boost::type_traits::no_type))); + + boost::fusion::unused_type my_unused; + BOOST_STATIC_ASSERT((sizeof(test_unused(my_unused)) == sizeof(boost::type_traits::yes_type))); +} From 0e900bba3fed9a0f98daad55f08d5647f51b80f1 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Fri, 27 Apr 2018 12:37:37 +0900 Subject: [PATCH 26/28] Specify defaulted and remove unnecessary functions from unused_type --- include/boost/fusion/support/unused.hpp | 36 +++++++------------------ 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/include/boost/fusion/support/unused.hpp b/include/boost/fusion/support/unused.hpp index 964839ab..1f65015e 100644 --- a/include/boost/fusion/support/unused.hpp +++ b/include/boost/fusion/support/unused.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2018 Kohei Takahashi 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) @@ -10,7 +11,6 @@ #include #include -#include #if defined(BOOST_MSVC) # pragma warning(push) # pragma warning(disable: 4522) // multiple assignment operators specified warning @@ -23,9 +23,16 @@ namespace boost { namespace fusion struct unused_type { BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - unused_type() BOOST_NOEXCEPT + BOOST_DEFAULTED_FUNCTION( + unused_type() BOOST_NOEXCEPT, { - } + }) + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED + BOOST_DEFAULTED_FUNCTION( + unused_type(unused_type const&) BOOST_NOEXCEPT, + { + }) template BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED @@ -33,35 +40,12 @@ namespace boost { namespace fusion { } - template - BOOST_FUSION_CONSTEXPR_THIS BOOST_FUSION_GPU_ENABLED - unused_type const& - operator=(T const&) const BOOST_NOEXCEPT - { - return *this; - } - - template - BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED - unused_type& - operator=(T const&) BOOST_NOEXCEPT - { - return *this; - } - BOOST_FUSION_CONSTEXPR_THIS BOOST_FUSION_GPU_ENABLED unused_type const& operator=(unused_type const&) const BOOST_NOEXCEPT { return *this; } - - BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED - unused_type& - operator=(unused_type const&) BOOST_NOEXCEPT - { - return *this; - } }; BOOST_CONSTEXPR_OR_CONST unused_type unused = unused_type(); From 5221bbbc766e664a21727e591bae2c1f98b8ebd2 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Fri, 27 Apr 2018 14:56:23 +0900 Subject: [PATCH 27/28] Added workaround for defaulted and noexcept --- include/boost/fusion/support/config.hpp | 10 +++++++++- include/boost/fusion/support/unused.hpp | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/boost/fusion/support/config.hpp b/include/boost/fusion/support/config.hpp index 23554531..16cd8f7f 100644 --- a/include/boost/fusion/support/config.hpp +++ b/include/boost/fusion/support/config.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 2014 Eric Niebler - Copyright (c) 2014 Kohei Takahashi + Copyright (c) 2014,2015,2018 Kohei Takahashi 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) @@ -96,4 +96,12 @@ namespace std #define BOOST_FUSION_CONSTEXPR_THIS BOOST_CONSTEXPR #endif + +// Workaround for GCC 4.6 that rejects defaulted function with noexcept. +#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 406) +# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED +#else +# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED BOOST_NOEXCEPT +#endif + #endif diff --git a/include/boost/fusion/support/unused.hpp b/include/boost/fusion/support/unused.hpp index 1f65015e..c376d07f 100644 --- a/include/boost/fusion/support/unused.hpp +++ b/include/boost/fusion/support/unused.hpp @@ -24,13 +24,13 @@ namespace boost { namespace fusion { BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED BOOST_DEFAULTED_FUNCTION( - unused_type() BOOST_NOEXCEPT, + unused_type() BOOST_FUSION_NOEXCEPT_ON_DEFAULTED, { }) BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED BOOST_DEFAULTED_FUNCTION( - unused_type(unused_type const&) BOOST_NOEXCEPT, + unused_type(unused_type const&) BOOST_FUSION_NOEXCEPT_ON_DEFAULTED, { }) From 6f8de8d774c5d74f7ddaa032e408891448e25a2b Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Fri, 27 Apr 2018 20:29:06 +0900 Subject: [PATCH 28/28] Added workaround for fold expr and dependent name --- include/boost/fusion/support/detail/and.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/boost/fusion/support/detail/and.hpp b/include/boost/fusion/support/detail/and.hpp index b45fb0e3..42926cb1 100644 --- a/include/boost/fusion/support/detail/and.hpp +++ b/include/boost/fusion/support/detail/and.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2016 Lee Clagett + Copyright (c) 2018 Kohei Takahashi 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) @@ -8,6 +9,7 @@ #define FUSION_AND_07152016_1625 #include +#include #include #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) @@ -15,7 +17,8 @@ #endif namespace boost { namespace fusion { namespace detail { -#if defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS) +#if defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS) \ + || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) template struct and_impl : false_type {};