mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-30 12:37:29 +02:00
30
.travis.yml
30
.travis.yml
@ -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
|
||||||
|
|
||||||
|
22
appveyor.yml
22
appveyor.yml
@ -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%
|
||||||
|
@ -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))
|
||||||
{}
|
{}
|
||||||
|
@ -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) {}
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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]> > >();
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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((
|
||||||
|
Reference in New Issue
Block a user