Merge pull request #178 from boostorg/more-ci-targets

More ci targets
This commit is contained in:
Kohei Takahashi
2018-04-26 06:41:55 +09:00
committed by GitHub
12 changed files with 90 additions and 37 deletions

View File

@ -11,11 +11,6 @@ os:
- linux - linux
- osx - osx
branches:
only:
- master
- develop
env: env:
matrix: matrix:
- BOGUS_JOB=true - BOGUS_JOB=true
@ -30,6 +25,20 @@ matrix:
- os: linux - os: linux
env: TOOLSET=gcc CXXSTD=03,11,1y env: TOOLSET=gcc CXXSTD=03,11,1y
- os: linux
env: TOOLSET=gcc-4.4 CXXSTD=98,0x
addons:
apt:
packages:
- g++-4.4
- os: linux
env: TOOLSET=gcc-4.6 CXXSTD=03,0x
addons:
apt:
packages:
- g++-4.6
- os: linux - os: linux
env: TOOLSET=gcc-4.7 CXXSTD=03,11 env: TOOLSET=gcc-4.7 CXXSTD=03,11
addons: addons:
@ -153,6 +162,17 @@ matrix:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0 - 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 - os: osx
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z

View File

@ -7,25 +7,35 @@ version: 1.0.{build}-{branch}
shallow_clone: true shallow_clone: true
branches:
only:
- master
- develop
environment: environment:
matrix: matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
TOOLSET: msvc-9.0 TOOLSET: msvc-9.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
TOOLSET: msvc-10.0 TOOLSET: msvc-10.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
TOOLSET: msvc-11.0 TOOLSET: msvc-11.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
TOOLSET: msvc-12.0 TOOLSET: msvc-12.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-14.0 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 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: msvc-14.1 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: install:
- set BOOST_BRANCH=develop - set BOOST_BRANCH=develop
@ -72,4 +82,4 @@ install:
build: off build: off
test_script: 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%

View File

@ -13,6 +13,11 @@
#include <boost/fusion/iterator/deref.hpp> #include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp> #include <boost/fusion/iterator/next.hpp>
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
#include <boost/core/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
#endif
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct fusion_sequence_tag; struct fusion_sequence_tag;
@ -114,8 +119,13 @@ namespace boost { namespace fusion { namespace detail
{} {}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
template <typename Value_, typename = typename enable_if<is_same<Value_, Value> >::type>
#else
typedef Value Value_;
#endif
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
keyed_element(Value&& value, Rest&& rest) keyed_element(Value_&& value, Rest&& rest)
: Rest(std::move(rest)) : Rest(std::move(rest))
, value_(BOOST_FUSION_FWD_ELEM(Value, value)) , value_(BOOST_FUSION_FWD_ELEM(Value, value))
{} {}

View File

@ -70,6 +70,10 @@ namespace boost { namespace fusion
cons(cons<Car2, Cdr2> const& rhs) cons(cons<Car2, Cdr2> const& rhs)
: car(rhs.car), cdr(rhs.cdr) {} : 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 <typename = void>
#endif
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
cons(cons const& rhs) cons(cons const& rhs)
: car(rhs.car), cdr(rhs.cdr) {} : car(rhs.car), cdr(rhs.cdr) {}

View File

@ -99,7 +99,7 @@ namespace std
// Workaround for compiler which doesn't compile decltype(expr)::type. // Workaround for compiler which doesn't compile decltype(expr)::type.
// It expects decltype(expr) deduced as mpl::identity<T>. // It expects decltype(expr) deduced as mpl::identity<T>.
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || BOOST_WORKAROUND(BOOST_GCC, < 40700)
# include <boost/mpl/identity.hpp> # include <boost/mpl/identity.hpp>
# define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \ # define BOOST_FUSION_IDENTIFIED_TYPE(parenthesized_expr) \
boost::mpl::identity<decltype parenthesized_expr>::type::type boost::mpl::identity<decltype parenthesized_expr>::type::type

View File

@ -9,8 +9,8 @@
<toolset name="msvc-11.0"/> <toolset name="msvc-11.0"/>
<toolset name="msvc-12.0"/> <toolset name="msvc-12.0"/>
<toolset name="qcc-4.4.2_x86"/> <toolset name="qcc-4.4.2_x86"/>
<toolset name="gcc-gnu-4.4~c++0x*"/> <toolset name="gcc-4.4~c++0x*"/>
<toolset name="gcc-gnu-4.4~gnu0x*"/> <toolset name="gcc-4.4~gnu0x*"/>
<note author="Kohei Takahashi"> <note author="Kohei Takahashi">
The compiler doesn't generate defaulted move ctor/assgin thus The compiler doesn't generate defaulted move ctor/assgin thus
perform copy construction/assginment. Even though such case, perform copy construction/assginment. Even though such case,

View File

@ -47,8 +47,8 @@ int main()
BOOST_TEST(y.w.value == 42); BOOST_TEST(y.w.value == 42);
} }
// Older MSVCs don't generate move ctor by default. // Older MSVCs and gcc 4.4 don't generate move ctor by default.
#if !(defined(CI_SKIP_KNOWN_FAILURE) && BOOST_WORKAROUND(BOOST_MSVC, < 1900)) #if !(defined(CI_SKIP_KNOWN_FAILURE) && (BOOST_WORKAROUND(BOOST_MSVC, < 1900) || BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)))
{ {
ns::value x; ns::value x;
ns::value y(std::move(x)); // move ns::value y(std::move(x)); // move
@ -66,7 +66,7 @@ int main()
BOOST_TEST(x.w.value == 0); BOOST_TEST(x.w.value == 0);
BOOST_TEST(y.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(); return boost::report_errors();
} }

View File

@ -47,8 +47,8 @@ int main()
BOOST_TEST(y.w.value == 42); BOOST_TEST(y.w.value == 42);
} }
// Older MSVCs don't generate move ctor by default. // Older MSVCs and gcc 4.4 don't generate move ctor by default.
#if !(defined(CI_SKIP_KNOWN_FAILURE) && BOOST_WORKAROUND(BOOST_MSVC, < 1900)) #if !(defined(CI_SKIP_KNOWN_FAILURE) && (BOOST_WORKAROUND(BOOST_MSVC, < 1900) || BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)))
{ {
ns::value<wrapper> x; ns::value<wrapper> x;
ns::value<wrapper> y(std::move(x)); // move ns::value<wrapper> y(std::move(x)); // move
@ -66,7 +66,7 @@ int main()
BOOST_TEST(x.w.value == 0); BOOST_TEST(x.w.value == 0);
BOOST_TEST(y.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(); return boost::report_errors();
} }

View File

@ -81,6 +81,9 @@ int main()
test_at<list<int[3]> >(); test_at<list<int[3]> >();
test_at<tuple<int[3]> >(); test_at<tuple<int[3]> >();
#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<set<int[3]> >(); test_at_key<set<int[3]> >();
#endif
test_at_key<map<pair<int[3], int[3]> > >(); test_at_key<map<pair<int[3], int[3]> > >();
} }

View File

@ -1,5 +1,6 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2014 Christoph Weiss Copyright (c) 2014 Christoph Weiss
Copyright (c) 2017 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -11,24 +12,24 @@
#include <boost/fusion/sequence/hash.hpp> #include <boost/fusion/sequence/hash.hpp>
#include <boost/functional/hash.hpp> #include <boost/functional/hash.hpp>
void void hash_test()
hash_test()
{ {
using namespace boost::fusion; namespace fusion = boost::fusion;
using namespace fusion;
const FUSION_SEQUENCE<int, char, bool, std::string> v0(42, 'x', false, "Aurea prima"); const FUSION_SEQUENCE<int, char, bool, std::string> v0(42, 'x', false, "Aurea prima");
const FUSION_SEQUENCE<int, char, bool, std::string> v1(42, 'x', false, "Aurea prima"); const FUSION_SEQUENCE<int, char, bool, std::string> 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<int, char, bool, std::string> w(41, 'x', false, "Aurea prima"); const FUSION_SEQUENCE<int, char, bool, std::string> 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<int, char, bool, std::string> x(42, 'y', false, "Aurea prima"); const FUSION_SEQUENCE<int, char, bool, std::string> 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<int, char, bool, std::string> y(42, 'x', true, "Aurea prima"); const FUSION_SEQUENCE<int, char, bool, std::string> 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<int, char, bool, std::string> z(42, 'x', false, "quae vindice nullo"); const FUSION_SEQUENCE<int, char, bool, std::string> 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));
} }

View File

@ -1,5 +1,6 @@
/*============================================================================= /*=============================================================================
Copyright (C) 2016 Lee Clagett Copyright (C) 2016 Lee Clagett
Copyright (C) 2018 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file 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 // is_constructible has a few requirements
#if !defined(BOOST_NO_CXX11_DECLTYPE) && \ #ifdef BOOST_TT_IS_CONSTRUCTIBLE_CONFORMING
!defined(BOOST_NO_CXX11_TEMPLATES) && \
!defined(BOOST_NO_SFINAE_EXPR)
#define FUSION_TEST_HAS_CONSTRUCTIBLE #define FUSION_TEST_HAS_CONSTRUCTIBLE
@ -88,7 +87,9 @@ void test_constructible()
BOOST_TEST(( BOOST_TEST((
is_constructible<FUSION_SEQUENCE<convertible>, convertible>(true) is_constructible<FUSION_SEQUENCE<convertible>, 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(( BOOST_TEST((
is_constructible<FUSION_SEQUENCE<int, int>, int, int>(true) is_constructible<FUSION_SEQUENCE<int, int>, int, int>(true)
)); ));
@ -131,6 +132,7 @@ void test_constructible()
FUSION_SEQUENCE<convertible, convertible>, convertible, convertible FUSION_SEQUENCE<convertible, convertible>, convertible, convertible
>(true) >(true)
)); ));
#endif // !(gcc < 4.7)
} }
#endif // is_constructible is available #endif // is_constructible is available

View File

@ -65,10 +65,13 @@ main()
BOOST_TEST((is_constructible<tuple<int>, int, int>(false))); BOOST_TEST((is_constructible<tuple<int>, int, int>(false)));
BOOST_TEST((is_constructible< tuple<int, int> >(true))); BOOST_TEST((is_constructible< tuple<int, int> >(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<tuple<int, int>, int, int>(true))); BOOST_TEST((is_constructible<tuple<int, int>, int, int>(true)));
BOOST_TEST(( BOOST_TEST((
is_constructible<tuple<convertible, convertible>, int, int>(true) is_constructible<tuple<convertible, convertible>, int, int>(true)
)); ));
#endif // !(gcc < 4.7)
BOOST_TEST((is_constructible<tuple<int, not_convertible>, int, int>(false))); BOOST_TEST((is_constructible<tuple<int, not_convertible>, int, int>(false)));
BOOST_TEST((is_constructible<tuple<not_convertible, int>, int, int>(false))); BOOST_TEST((is_constructible<tuple<not_convertible, int>, int, int>(false)));
BOOST_TEST(( BOOST_TEST((