Compare commits

..

21 Commits

Author SHA1 Message Date
edddad2b4e Merge branch 'master' into develop 2020-03-26 19:13:17 +08:00
b3c212c47f Merge pull request #216 from Kojoley/fix-comparison-operators-enabler
Fix comparison operators enabler
2019-12-04 14:24:27 +08:00
4778c4c180 Fix comparison operators enabler
Overloads must not be presented until both arguments are Fusion sequences.
2019-12-04 03:04:34 +03:00
5f30a8da60 Merge pull request #212 from Romain-Geissler-1A/delete-private-copy-operators
Explicitly delete all non implemented assignment operators.
2019-11-19 09:40:12 +08:00
fc32335387 Merge pull request #215 from Kojoley/patch-1
CI: Fix Appveyor builds
2019-11-01 08:32:51 +08:00
b5751ae85d CI: Fix Appveyor builds 2019-10-31 22:12:43 +03:00
e5a007579f Merge pull request #214 from Jac1494/develop
Disabled two test which tries to return local address
2019-07-27 10:54:46 +08:00
3e07b3f66b Disabled two test which tries to return local address 2019-07-25 18:10:22 +05:30
08076be2ac Explicitly delete all non implemented assignment operators.
Commit (almost) automatically generated with the following sed command:
sed -i -ne '1h;1!H;${g;s|\n[[:blank:]]*private:\n\([[:blank:]]*\)// silence MSVC warning C4512: assignment operator could not be generated\n\([[:blank:]]*\)\([^\n]\+\);\n|\n\1// silence MSVC warning C4512: assignment operator could not be generated\n\2BOOST_DELETED_FUNCTION(\3)\n|g;p}' $(git ls-files)
2019-05-08 17:11:37 +00:00
4c51811315 Merge pull request #208 from Mike-Devel/min_cmake
[CMake] Add minimal cmake file
2019-03-08 08:55:47 +09:00
19d6c7ad3b Fix is_view_impl to return false for non fusion sequences (just like is_sequence_impl). (reverted from commit 1c693f05bf) 2019-02-18 13:59:58 +08:00
1c693f05bf Fix is_view_impl to return false for non fusion sequences (just like is_sequence_impl). 2019-02-18 12:45:36 +08:00
b180146e3d [CMake] Add disclaimer and turn tabs into spaces 2019-01-28 13:02:40 +01:00
68affa1706 [CMake] Generate cmake target that other libraries can use
... to express their dependency on this library and retrieve any
configuration information such as the include directory, binary
to link to (if any), transitive dependencies, necessary compiler
options or the required c++ standards level.
2019-01-23 19:03:03 +01:00
f0089a640e Merge pull request #205 from Kojoley/sequence-intrinsic-at
Tweak sequence intrinsic at
2019-01-16 18:03:12 +09:00
81a1c2c99a Merge pull request #207 from boostorg/develop
Update CI scripts on master
2019-01-10 17:19:50 +09:00
7b55860d78 Merge pull request #206 from boostorg/update-ci
Update CI scripts
2019-01-10 08:45:02 +09:00
70837a30c5 CI: Added clang-win runner 2019-01-09 18:59:05 +09:00
2e91d0b78e CI: Updated travis compiler matrix 2019-01-09 18:58:40 +09:00
e375a4541b CI: Updated for the recent boost-install changes 2019-01-09 18:33:23 +09:00
908a34a4ed Tweak sequence intrinsic at
A bit clearer and slightly less work for the inliner
2018-11-01 02:01:15 +03:00
24 changed files with 151 additions and 84 deletions

View File

@ -21,32 +21,48 @@ matrix:
- env: BOGUS_JOB=true
include:
# trusty default (gcc 4.8.4)
- os: linux
env: TOOLSET=gcc CXXSTD=03,11,1y
- os: linux
dist: xenial
env: TOOLSET=gcc-4.4 CXXSTD=98,0x
addons:
apt:
packages:
- g++-4.4
sources:
- ubuntu-toolchain-r-test
#- os: linux
# dist: xenial
# env: TOOLSET=gcc-4.5 CXXSTD=03,0x
# addons:
# apt:
# packages:
# - g++-4.5
# sources:
# - ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-4.6 CXXSTD=03,0x
addons:
apt:
packages:
- g++-4.6
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-4.7 CXXSTD=03,11
addons:
apt:
packages:
- g++-4.7
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=gcc-4.8 CXXSTD=03,11,1y
addons:
apt:
@ -56,7 +72,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-4.9 CXXSTD=03,11,1y
dist: xenial
env: TOOLSET=gcc-4.9 CXXSTD=03,11,14
addons:
apt:
packages:
@ -65,7 +82,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-5 CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-5 CXXSTD=03,11,14,17
addons:
apt:
packages:
@ -74,7 +92,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-6 CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-6 CXXSTD=03,11,14,17
addons:
apt:
packages:
@ -83,7 +102,8 @@ matrix:
- ubuntu-toolchain-r-test
- os: linux
env: TOOLSET=gcc-7 CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-7 CXXSTD=03,11,14,17
addons:
apt:
packages:
@ -91,87 +111,93 @@ matrix:
sources:
- ubuntu-toolchain-r-test
# trusty default (clang 3.9.0)
- os: linux
env: TOOLSET=clang CXXSTD=03,11,14,1z
dist: xenial
env: TOOLSET=gcc-8 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- libstdc++-4.9-dev
- g++-8
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-3.5 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.5
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-3.6 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.6
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.6
- os: linux
dist: xenial
env: TOOLSET=clang-3.7 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.7
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7
- os: linux
dist: xenial
env: TOOLSET=clang-3.8 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.8
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-3.9 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-3.9
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- os: linux
dist: xenial
env: TOOLSET=clang-4.0 CXXSTD=03,11,14,1z
addons:
apt:
packages:
- clang-4.0
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0
- os: linux
env: TOOLSET=clang-5.0 CXXSTD=03,11,14,1z,2a
dist: xenial
env: TOOLSET=clang-5.0 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-5.0
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-5.0
- llvm-toolchain-xenial-5.0
- os: linux
dist: xenial
env: TOOLSET=clang-6.0 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-6.0
sources:
- llvm-toolchain-xenial-6.0
- os: linux
dist: xenial
env: TOOLSET=clang-7.0 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-7
sources:
- llvm-toolchain-xenial-7
- os: osx
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
@ -211,7 +237,7 @@ install:
- git submodule init libs/typeof
- git submodule init libs/utility
- git submodule init tools/build
- git submodule init libs/headers tools/boost_install tools/build
- git submodule update
- rm -rf libs/fusion

29
CMakeLists.txt Normal file
View File

@ -0,0 +1,29 @@
# Copyright 2018 Mike Dev
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
#
# Partial (add_subdirectory only) and experimental CMake support
# Subject to change; please do not rely on the contents of this file yet
cmake_minimum_required(VERSION 3.5)
project(BoostFusion LANGUAGES CXX)
add_library(boost_fusion INTERFACE)
add_library(Boost::fusion ALIAS boost_fusion)
target_include_directories(boost_fusion INTERFACE include)
target_link_libraries(boost_fusion
INTERFACE
Boost::config
Boost::container_hash
Boost::core
Boost::function_types
Boost::mpl
Boost::preprocessor
Boost::static_assert
Boost::tuple
Boost::type_traits
Boost::typeof
Boost::utility
)

View File

@ -9,16 +9,16 @@ shallow_clone: true
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-9.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-10.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-11.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-12.0
CXXSTD: latest # fake
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
@ -36,6 +36,12 @@ environment:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: msvc-14.1
CXXSTD: latest
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: clang-win
CXXSTD: 14
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: clang-win
CXXSTD: 17
install:
- set BOOST_BRANCH=develop
@ -73,7 +79,7 @@ install:
- git submodule init libs/typeof
- git submodule init libs/utility
- git submodule init tools/build
- git submodule init libs/headers tools/boost_install tools/build
- git submodule update
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\fusion
- cmd /c bootstrap

View File

@ -144,9 +144,8 @@ namespace boost { namespace fusion
: is_same<typename I1::identity, typename I2::identity>
{};
private:
// silence MSVC warning C4512: assignment operator could not be generated
boost_tuple_iterator& operator= (boost_tuple_iterator const&);
BOOST_DELETED_FUNCTION(boost_tuple_iterator& operator= (boost_tuple_iterator const&))
};
template <typename Null>

View File

@ -111,9 +111,8 @@ namespace boost { namespace fusion {
Seq& seq_;
private:
// silence MSVC warning C4512: assignment operator could not be generated
deque_iterator& operator= (deque_iterator const&);
BOOST_DELETED_FUNCTION(deque_iterator& operator= (deque_iterator const&))
};
}}

View File

@ -42,9 +42,8 @@ namespace boost { namespace fusion
cons_type& cons;
private:
// silence MSVC warning C4512: assignment operator could not be generated
cons_iterator& operator= (cons_iterator const&);
BOOST_DELETED_FUNCTION(cons_iterator& operator= (cons_iterator const&))
};
struct nil_iterator : iterator_base<nil_iterator>

View File

@ -156,9 +156,8 @@ namespace boost { namespace fusion
Seq& seq_;
private:
// silence MSVC warning C4512: assignment operator could not be generated
map_iterator& operator= (map_iterator const&);
BOOST_DELETED_FUNCTION(map_iterator& operator= (map_iterator const&))
};
}}

View File

@ -43,9 +43,8 @@ namespace boost { namespace fusion
Vector& vec;
private:
// silence MSVC warning C4512: assignment operator could not be generated
vector_iterator& operator= (vector_iterator const&);
BOOST_DELETED_FUNCTION(vector_iterator& operator= (vector_iterator const&))
};
}}

View File

@ -20,13 +20,13 @@ namespace boost { namespace fusion { namespace traits
{
template <typename Seq1, typename Seq2, typename Enable = void>
struct enable_equality
: mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
: mpl::and_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
{};
template <typename Seq1, typename Seq2, typename Enable = void>
struct enable_comparison
: mpl::and_<
mpl::or_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >
traits::is_sequence<Seq1>, traits::is_sequence<Seq2>
, mpl::equal_to<result_of::size<Seq1>, result_of::size<Seq2> >
>
{};

View File

@ -118,7 +118,7 @@ namespace boost { namespace fusion
>::type
at_c(Sequence& seq)
{
return fusion::at<mpl::int_<N> >(seq);
return result_of::at_c<Sequence, N>::call(seq);
}
template <int N, typename Sequence>
@ -126,7 +126,7 @@ namespace boost { namespace fusion
inline typename result_of::at_c<Sequence const, N>::type
at_c(Sequence const& seq)
{
return fusion::at<mpl::int_<N> >(seq);
return result_of::at_c<Sequence const, N>::call(seq);
}
}}

View File

@ -144,9 +144,8 @@ namespace boost { namespace fusion
Stream& stream;
private:
// silence MSVC warning C4512: assignment operator could not be generated
string_ios_manip& operator= (string_ios_manip const&);
BOOST_DELETED_FUNCTION(string_ios_manip& operator= (string_ios_manip const&))
};
} // detail

View File

@ -57,9 +57,8 @@ namespace boost { namespace fusion
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
filter_view& operator= (filter_view const&);
BOOST_DELETED_FUNCTION(filter_view& operator= (filter_view const&))
};
}}

View File

@ -61,9 +61,8 @@ namespace boost { namespace fusion
first_type first;
private:
// silence MSVC warning C4512: assignment operator could not be generated
filter_iterator& operator= (filter_iterator const&);
BOOST_DELETED_FUNCTION(filter_iterator& operator= (filter_iterator const&))
};
}}

View File

@ -69,10 +69,10 @@ namespace boost { namespace fusion
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
concat_last_type concat_last() const { return fusion::end(seq2); }
private:
// silence MSVC warning C4512: assignment operator could not be generated
joint_view& operator= (joint_view const&);
BOOST_DELETED_FUNCTION(joint_view& operator= (joint_view const&))
private:
typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
};

View File

@ -50,9 +50,8 @@ namespace boost { namespace fusion
first_type first;
concat_type concat;
private:
// silence MSVC warning C4512: assignment operator could not be generated
joint_view_iterator& operator= (joint_view_iterator const&);
BOOST_DELETED_FUNCTION(joint_view_iterator& operator= (joint_view_iterator const&))
};
}}

View File

@ -47,9 +47,8 @@ namespace boost { namespace fusion
Sequence& seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
nview_iterator& operator= (nview_iterator const&);
BOOST_DELETED_FUNCTION(nview_iterator& operator= (nview_iterator const&))
};
}}

View File

@ -44,9 +44,8 @@ namespace boost { namespace fusion
stored_seq_type seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
repetitive_view& operator= (repetitive_view const&);
BOOST_DELETED_FUNCTION(repetitive_view& operator= (repetitive_view const&))
};
}}

View File

@ -47,9 +47,8 @@ namespace boost { namespace fusion
Sequence& seq;
pos_type pos;
private:
// silence MSVC warning C4512: assignment operator could not be generated
repetitive_view_iterator& operator= (repetitive_view_iterator const&);
BOOST_DELETED_FUNCTION(repetitive_view_iterator& operator= (repetitive_view_iterator const&))
};
}}

View File

@ -61,9 +61,8 @@ namespace boost { namespace fusion
last_type last() const { return fusion::end(seq); }
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
private:
// silence MSVC warning C4512: assignment operator could not be generated
reverse_view& operator= (reverse_view const&);
BOOST_DELETED_FUNCTION(reverse_view& operator= (reverse_view const&))
};
}}

View File

@ -48,9 +48,8 @@ namespace boost { namespace fusion
first_type first;
private:
// silence MSVC warning C4512: assignment operator could not be generated
reverse_view_iterator& operator= (reverse_view_iterator const&);
BOOST_DELETED_FUNCTION(reverse_view_iterator& operator= (reverse_view_iterator const&))
};
}}

View File

@ -76,9 +76,8 @@ namespace boost { namespace fusion
typename mpl::if_<traits::is_view<Sequence1>, Sequence1, Sequence1&>::type seq1;
typename mpl::if_<traits::is_view<Sequence2>, Sequence2, Sequence2&>::type seq2;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view& operator= (transform_view const&);
BOOST_DELETED_FUNCTION(transform_view& operator= (transform_view const&))
};
// Unary Version
@ -113,9 +112,8 @@ namespace boost { namespace fusion
typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq;
transform_type f;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view& operator= (transform_view const&);
BOOST_DELETED_FUNCTION(transform_view& operator= (transform_view const&))
};
}}

View File

@ -42,9 +42,8 @@ namespace boost { namespace fusion
first_type first;
transform_type f;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view_iterator& operator= (transform_view_iterator const&);
BOOST_DELETED_FUNCTION(transform_view_iterator& operator= (transform_view_iterator const&))
};
// Binary Version
@ -70,9 +69,8 @@ namespace boost { namespace fusion
first2_type first2;
transform_type f;
private:
// silence MSVC warning C4512: assignment operator could not be generated
transform_view_iterator2& operator= (transform_view_iterator2 const&);
BOOST_DELETED_FUNCTION(transform_view_iterator2& operator= (transform_view_iterator2 const&))
};
}}

View File

@ -388,7 +388,8 @@ void test_sequence_n(Sequence & seq, mpl::int_<0>)
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_spt_ctx,seq)) = that.data));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_ctx,seq)));
// disabling this test, since it tries to return local address which is undefined behavior
//~ BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ref_c_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ptr_c_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_spt_c_ctx,seq)));
@ -398,7 +399,8 @@ void test_sequence_n(Sequence & seq, mpl::int_<0>)
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_spt_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_d_ctx,seq)));
// disabling this test, since it tries to return local address which is undefined behavior
//~ BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_obj_c_d_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ref_c_d_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ptr_c_d_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_spt_c_d_ctx,seq)));

View File

@ -8,6 +8,20 @@
#include <boost/detail/lightweight_test.hpp>
#include <boost/fusion/sequence/comparison.hpp>
struct not_a_fusion_container {};
template <typename T>
inline bool operator==(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator!=(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator<(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator<=(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator>(not_a_fusion_container, T const&) { return true; }
template <typename T>
inline bool operator>=(not_a_fusion_container, T const&) { return true; }
void
equality_test()
{
@ -28,6 +42,9 @@ equality_test()
BOOST_TEST(!(v1 == v5));
BOOST_TEST(v5 != v1);
BOOST_TEST(!(v5 == v1));
BOOST_TEST(not_a_fusion_container() == v1);
BOOST_TEST(not_a_fusion_container() != v1);
}
void
@ -51,6 +68,11 @@ ordering_test()
FUSION_SEQUENCE<int, char, bool> v5(5, 'a', true);
v1 >= v5;
#endif
BOOST_TEST(not_a_fusion_container() > v1);
BOOST_TEST(not_a_fusion_container() >= v1);
BOOST_TEST(not_a_fusion_container() < v1);
BOOST_TEST(not_a_fusion_container() <= v1);
}