mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-22 00:32:53 +02:00
Fix issue 11267.
Compiler yields compile error within a function witch used in unevaluate context of constexpr function because of CWG 1581 [2]. 1. https://llvm.org/bugs/show_bug.cgi?id=23135 2. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1581
This commit is contained in:
@ -94,13 +94,13 @@ namespace boost { namespace fusion {
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
|
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
|
||||||
: base(seq)
|
: base(seq)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<typename Sequence>
|
template<typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
|
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
|
||||||
: base(base::from_iterator(fusion::begin(seq)))
|
: base(base::from_iterator(fusion::begin(seq)))
|
||||||
{}
|
{}
|
||||||
@ -129,7 +129,7 @@ FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
|||||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
|
||||||
(defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
(defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
||||||
template <typename T0_>
|
template <typename T0_>
|
||||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
explicit deque(T0_&& t0
|
explicit deque(T0_&& t0
|
||||||
, typename enable_if<is_convertible<T0_, T0> >::type* /*dummy*/ = 0
|
, typename enable_if<is_convertible<T0_, T0> >::type* /*dummy*/ = 0
|
||||||
)
|
)
|
||||||
@ -140,7 +140,7 @@ FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
|||||||
: base(std::forward<deque>(rhs))
|
: base(std::forward<deque>(rhs))
|
||||||
{}
|
{}
|
||||||
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
||||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq
|
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq
|
||||||
, typename disable_if<
|
, typename disable_if<
|
||||||
is_convertible<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>, T0>
|
is_convertible<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>, T0>
|
||||||
|
@ -73,7 +73,7 @@ namespace boost { namespace fusion
|
|||||||
: car(rhs.car), cdr(rhs.cdr) {}
|
: car(rhs.car), cdr(rhs.cdr) {}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
cons(
|
cons(
|
||||||
Sequence const& seq
|
Sequence const& seq
|
||||||
, typename boost::enable_if<
|
, typename boost::enable_if<
|
||||||
|
@ -60,7 +60,7 @@ namespace boost { namespace fusion
|
|||||||
: inherited_type(rhs) {}
|
: inherited_type(rhs) {}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
list(Sequence const& rhs
|
list(Sequence const& rhs
|
||||||
, typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
|
, typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
|
||||||
: inherited_type(rhs) {}
|
: inherited_type(rhs) {}
|
||||||
|
@ -85,7 +85,7 @@ namespace boost { namespace fusion
|
|||||||
: data(rhs.data) {}
|
: data(rhs.data) {}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(Sequence const& rhs)
|
map(Sequence const& rhs)
|
||||||
: data(rhs) {}
|
: data(rhs) {}
|
||||||
|
|
||||||
|
@ -66,21 +66,21 @@ namespace boost { namespace fusion
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(Sequence const& seq
|
map(Sequence const& seq
|
||||||
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
||||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(Sequence& seq
|
map(Sequence& seq
|
||||||
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
||||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(Sequence&& seq
|
map(Sequence&& seq
|
||||||
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
||||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||||
@ -93,7 +93,7 @@ namespace boost { namespace fusion
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
template <typename First, typename ...T_>
|
template <typename First, typename ...T_>
|
||||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(First&& first, T_&&... rest)
|
map(First&& first, T_&&... rest)
|
||||||
: base_type(BOOST_FUSION_FWD_ELEM(First, first), BOOST_FUSION_FWD_ELEM(T_, rest)...)
|
: base_type(BOOST_FUSION_FWD_ELEM(First, first), BOOST_FUSION_FWD_ELEM(T_, rest)...)
|
||||||
{}
|
{}
|
||||||
|
@ -116,16 +116,6 @@ namespace boost { namespace fusion
|
|||||||
: vec(rhs.vec) {}
|
: vec(rhs.vec) {}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
// XXX:
|
|
||||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
|
||||||
FUSION_HASH if !defined(BOOST_CLANG)
|
|
||||||
BOOST_CONSTEXPR
|
|
||||||
FUSION_HASH endif
|
|
||||||
#else
|
|
||||||
#if !defined(BOOST_CLANG)
|
|
||||||
BOOST_CONSTEXPR
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
vector(Sequence const& rhs,
|
vector(Sequence const& rhs,
|
||||||
typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
|
typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
|
||||||
|
@ -49,7 +49,7 @@ namespace boost { namespace fusion
|
|||||||
|
|
||||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
template <typename Second2>
|
template <typename Second2>
|
||||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
pair(Second2&& val
|
pair(Second2&& val
|
||||||
, typename boost::disable_if<is_lvalue_reference<Second2> >::type* /* dummy */ = 0
|
, typename boost::disable_if<is_lvalue_reference<Second2> >::type* /* dummy */ = 0
|
||||||
, typename boost::enable_if<is_convertible<Second2, Second> >::type* /*dummy*/ = 0
|
, typename boost::enable_if<is_convertible<Second2, Second> >::type* /*dummy*/ = 0
|
||||||
|
@ -78,6 +78,7 @@ project
|
|||||||
[ run sequence/list_make.cpp : : : : ]
|
[ run sequence/list_make.cpp : : : : ]
|
||||||
[ run sequence/list_misc.cpp : : : : ]
|
[ run sequence/list_misc.cpp : : : : ]
|
||||||
[ run sequence/list_mutate.cpp : : : : ]
|
[ run sequence/list_mutate.cpp : : : : ]
|
||||||
|
[ run sequence/list_nest.cpp : : : : ]
|
||||||
[ run sequence/list_tie.cpp : : : : ]
|
[ run sequence/list_tie.cpp : : : : ]
|
||||||
[ run sequence/list_value_at.cpp : : : : ]
|
[ run sequence/list_value_at.cpp : : : : ]
|
||||||
[ run sequence/deque_comparison.cpp : : : : ]
|
[ run sequence/deque_comparison.cpp : : : : ]
|
||||||
@ -89,6 +90,7 @@ project
|
|||||||
[ run sequence/deque_misc.cpp : : : : ]
|
[ run sequence/deque_misc.cpp : : : : ]
|
||||||
[ run sequence/deque_move.cpp : : : : ]
|
[ run sequence/deque_move.cpp : : : : ]
|
||||||
[ run sequence/deque_mutate.cpp : : : : ]
|
[ run sequence/deque_mutate.cpp : : : : ]
|
||||||
|
[ run sequence/deque_nest.cpp : : : : ]
|
||||||
[ run sequence/deque_tie.cpp : : : : ]
|
[ run sequence/deque_tie.cpp : : : : ]
|
||||||
[ run sequence/deque_value_at.cpp : : : : ]
|
[ run sequence/deque_value_at.cpp : : : : ]
|
||||||
[ run sequence/front_extended_deque.cpp : : : : ]
|
[ run sequence/front_extended_deque.cpp : : : : ]
|
||||||
@ -131,6 +133,7 @@ project
|
|||||||
[ run sequence/vector_move.cpp : : : : ]
|
[ run sequence/vector_move.cpp : : : : ]
|
||||||
[ run sequence/vector_mutate.cpp : : : : ]
|
[ run sequence/vector_mutate.cpp : : : : ]
|
||||||
[ run sequence/vector_n.cpp : : : : ]
|
[ run sequence/vector_n.cpp : : : : ]
|
||||||
|
[ run sequence/vector_nest.cpp : : : : ]
|
||||||
[ run sequence/vector_hash.cpp : : : : ]
|
[ run sequence/vector_hash.cpp : : : : ]
|
||||||
[ run sequence/vector_tie.cpp : : : : ]
|
[ run sequence/vector_tie.cpp : : : : ]
|
||||||
[ run sequence/vector_value_at.cpp : : : : ]
|
[ run sequence/vector_value_at.cpp : : : : ]
|
||||||
@ -184,6 +187,7 @@ project
|
|||||||
[ compile support/pair_map.cpp : : : : ]
|
[ compile support/pair_map.cpp : : : : ]
|
||||||
[ compile support/pair_set.cpp : : : : ]
|
[ compile support/pair_set.cpp : : : : ]
|
||||||
[ compile support/pair_vector.cpp : : : : ]
|
[ compile support/pair_vector.cpp : : : : ]
|
||||||
|
[ compile support/pair_nest.cpp : : : : ]
|
||||||
|
|
||||||
# [ compile-fail xxx.cpp : : : : ]
|
# [ compile-fail xxx.cpp : : : : ]
|
||||||
|
|
||||||
|
19
test/sequence/deque_nest.cpp
Normal file
19
test/sequence/deque_nest.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*=============================================================================
|
||||||
|
Copyright (C) 2015 Kohei Takahshi
|
||||||
|
|
||||||
|
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 <boost/fusion/container/deque/deque.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
#define FUSION_SEQUENCE deque
|
||||||
|
#include "nest.hpp"
|
||||||
|
|
||||||
|
int
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
test();
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
||||||
|
|
19
test/sequence/list_nest.cpp
Normal file
19
test/sequence/list_nest.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*=============================================================================
|
||||||
|
Copyright (C) 2015 Kohei Takahshi
|
||||||
|
|
||||||
|
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 <boost/fusion/container/list/list.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
#define FUSION_SEQUENCE list
|
||||||
|
#include "nest.hpp"
|
||||||
|
|
||||||
|
int
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
test();
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
||||||
|
|
58
test/sequence/nest.hpp
Normal file
58
test/sequence/nest.hpp
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*=============================================================================
|
||||||
|
Copyright (C) 2015 Kohei Takahshi
|
||||||
|
|
||||||
|
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 <utility>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
template <typename C>
|
||||||
|
void test_copy()
|
||||||
|
{
|
||||||
|
C src;
|
||||||
|
C dst = src;
|
||||||
|
(void)dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
template <typename C>
|
||||||
|
void test_move()
|
||||||
|
{
|
||||||
|
C src;
|
||||||
|
C dst = std::move(src);
|
||||||
|
(void)dst;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <typename C>
|
||||||
|
void test_all()
|
||||||
|
{
|
||||||
|
test_copy<C>();
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
test_move<C>();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test()
|
||||||
|
{
|
||||||
|
using namespace boost::fusion;
|
||||||
|
|
||||||
|
test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<> > >();
|
||||||
|
test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<>, int> >();
|
||||||
|
test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<> > >();
|
||||||
|
test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<>, float> >();
|
||||||
|
|
||||||
|
test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int> > >();
|
||||||
|
test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int>, int> >();
|
||||||
|
test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int> > >();
|
||||||
|
test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int>, float> >();
|
||||||
|
|
||||||
|
test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int, float> > >();
|
||||||
|
test_all<FUSION_SEQUENCE<FUSION_SEQUENCE<int, float>, int> >();
|
||||||
|
test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int, float> > >();
|
||||||
|
test_all<FUSION_SEQUENCE<int, FUSION_SEQUENCE<int, float>, float> >();
|
||||||
|
}
|
||||||
|
|
19
test/sequence/vector_nest.cpp
Normal file
19
test/sequence/vector_nest.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*=============================================================================
|
||||||
|
Copyright (C) 2015 Kohei Takahshi
|
||||||
|
|
||||||
|
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 <boost/fusion/container/vector/vector.hpp>
|
||||||
|
#include <boost/core/lightweight_test.hpp>
|
||||||
|
|
||||||
|
#define FUSION_SEQUENCE vector
|
||||||
|
#include "nest.hpp"
|
||||||
|
|
||||||
|
int
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
test();
|
||||||
|
return boost::report_errors();
|
||||||
|
}
|
||||||
|
|
24
test/support/pair_nest.cpp
Normal file
24
test/support/pair_nest.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2015 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 <boost/core/ignore_unused.hpp>
|
||||||
|
#include <boost/fusion/support/pair.hpp>
|
||||||
|
|
||||||
|
using namespace boost::fusion;
|
||||||
|
|
||||||
|
template <typename C>
|
||||||
|
void copy()
|
||||||
|
{
|
||||||
|
pair<int, C> src;
|
||||||
|
pair<int, C> dest = src;
|
||||||
|
boost::ignore_unused(dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
copy<pair<void, float> >();
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user