diff options
Diffstat (limited to 'boost/fusion/view')
79 files changed, 287 insertions, 179 deletions
diff --git a/boost/fusion/view/detail/strictest_traversal.hpp b/boost/fusion/view/detail/strictest_traversal.hpp index 4092ea4da6..9ad1f7aa85 100644 --- a/boost/fusion/view/detail/strictest_traversal.hpp +++ b/boost/fusion/view/detail/strictest_traversal.hpp @@ -59,7 +59,7 @@ namespace boost { namespace fusion // never called, but needed for decltype-based result_of (C++0x) #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES template<typename StrictestSoFar, typename Next> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<strictest_traversal_impl(StrictestSoFar, Next)>::type operator()(StrictestSoFar&&, Next&&) const; #endif diff --git a/boost/fusion/view/filter_view/detail/begin_impl.hpp b/boost/fusion/view/filter_view/detail/begin_impl.hpp index 89f67d02ad..3ce439a41f 100644 --- a/boost/fusion/view/filter_view/detail/begin_impl.hpp +++ b/boost/fusion/view/filter_view/detail/begin_impl.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion typedef typename Sequence::category category; typedef filter_iterator<category, first_type, last_type, pred_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/filter_view/detail/deref_data_impl.hpp b/boost/fusion/view/filter_view/detail/deref_data_impl.hpp index ba8631f501..e0d9a0edb0 100644 --- a/boost/fusion/view/filter_view/detail/deref_data_impl.hpp +++ b/boost/fusion/view/filter_view/detail/deref_data_impl.hpp @@ -26,7 +26,7 @@ namespace boost { namespace fusion { namespace extension result_of::deref_data<typename It::first_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(It const& it) { diff --git a/boost/fusion/view/filter_view/detail/end_impl.hpp b/boost/fusion/view/filter_view/detail/end_impl.hpp index fee9f6d459..1a2a5ba48d 100644 --- a/boost/fusion/view/filter_view/detail/end_impl.hpp +++ b/boost/fusion/view/filter_view/detail/end_impl.hpp @@ -30,7 +30,7 @@ namespace boost { namespace fusion typedef typename Sequence::category category; typedef filter_iterator<category,last_type, last_type, pred_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/filter_view/detail/next_impl.hpp b/boost/fusion/view/filter_view/detail/next_impl.hpp index 0091e897ea..4f17455766 100644 --- a/boost/fusion/view/filter_view/detail/next_impl.hpp +++ b/boost/fusion/view/filter_view/detail/next_impl.hpp @@ -63,7 +63,7 @@ namespace boost { namespace fusion category, typename filter::type, last_type, pred_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/filter_view/filter_view.hpp b/boost/fusion/view/filter_view/filter_view.hpp index dd710fabd1..db61cad60e 100644 --- a/boost/fusion/view/filter_view/filter_view.hpp +++ b/boost/fusion/view/filter_view/filter_view.hpp @@ -46,14 +46,14 @@ namespace boost { namespace fusion typedef typename result_of::end<Sequence>::type last_type; typedef Pred pred_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED filter_view(Sequence& in_seq) : seq(in_seq) {} - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED first_type first() const { return fusion::begin(seq); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED last_type last() const { return fusion::end(seq); } typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq; diff --git a/boost/fusion/view/filter_view/filter_view_iterator.hpp b/boost/fusion/view/filter_view/filter_view_iterator.hpp index 14aaa46005..f1b9f54de3 100644 --- a/boost/fusion/view/filter_view/filter_view_iterator.hpp +++ b/boost/fusion/view/filter_view/filter_view_iterator.hpp @@ -55,7 +55,7 @@ namespace boost { namespace fusion typedef last_iter last_type; typedef Pred pred_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED filter_iterator(First const& in_first) : first(filter::iter_call(first_converter::call(in_first))) {} @@ -67,6 +67,15 @@ namespace boost { namespace fusion }; }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename Category, typename First, typename Last, typename Pred> + struct iterator_traits< ::boost::fusion::filter_iterator<Category, First, Last, Pred> > + { }; +} +#endif + #endif diff --git a/boost/fusion/view/flatten_view/flatten_view.hpp b/boost/fusion/view/flatten_view/flatten_view.hpp index aa47240771..8e40158d1c 100644 --- a/boost/fusion/view/flatten_view/flatten_view.hpp +++ b/boost/fusion/view/flatten_view/flatten_view.hpp @@ -8,6 +8,7 @@ #define BOOST_FUSION_FLATTEN_VIEW_HPP_INCLUDED +#include <boost/fusion/support/config.hpp> #include <boost/mpl/bool.hpp> #include <boost/mpl/single_view.hpp> #include <boost/fusion/support/detail/access.hpp> @@ -23,7 +24,7 @@ namespace boost { namespace fusion { struct forward_traversal_tag; struct flatten_view_tag; - + template <typename Sequence> struct flatten_view : sequence_base<flatten_view<Sequence> > @@ -32,18 +33,21 @@ namespace boost { namespace fusion typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::true_ is_view; typedef forward_traversal_tag category; - + typedef Sequence sequence_type; typedef typename result_of::begin<Sequence>::type first_type; typedef typename result_of::end<Sequence>::type last_type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED explicit flatten_view(Sequence& seq) : seq(seq) {} - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED first_type first() const { return fusion::begin(seq); } + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED last_type last() const { return fusion::end(seq); } - + typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq; }; }} @@ -57,19 +61,20 @@ namespace boost { namespace fusion { namespace extension struct apply { typedef typename Sequence::first_type first_type; - + typedef typename result_of::begin< mpl::single_view< typename Sequence::sequence_type> >::type root_iterator; - + typedef detail::seek_descent<root_iterator, first_type> seek_descent; - + typedef typename seek_descent::type type; + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type call(Sequence& seq) { @@ -77,7 +82,7 @@ namespace boost { namespace fusion { namespace extension } }; }; - + template<> struct end_impl<flatten_view_tag> { @@ -85,13 +90,14 @@ namespace boost { namespace fusion { namespace extension struct apply { typedef typename Sequence::last_type last_type; - + typedef typename result_of::end< mpl::single_view< typename Sequence::sequence_type> >::type type; + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type call(Sequence&) { diff --git a/boost/fusion/view/flatten_view/flatten_view_iterator.hpp b/boost/fusion/view/flatten_view/flatten_view_iterator.hpp index dfe613ac84..1ecf692822 100644 --- a/boost/fusion/view/flatten_view/flatten_view_iterator.hpp +++ b/boost/fusion/view/flatten_view/flatten_view_iterator.hpp @@ -8,6 +8,7 @@ #define BOOST_FUSION_FLATTEN_VIEW_ITERATOR_HPP_INCLUDED +#include <boost/fusion/support/config.hpp> #include <boost/mpl/bool.hpp> #include <boost/mpl/eval_if.hpp> #include <boost/type_traits/remove_reference.hpp> @@ -23,22 +24,23 @@ namespace boost { namespace fusion { struct forward_traversal_tag; struct flatten_view_iterator_tag; - + template<class First, class Base> struct flatten_view_iterator : iterator_base<flatten_view_iterator<First, Base> > { typedef flatten_view_iterator_tag fusion_tag; typedef forward_traversal_tag category; - + typedef convert_iterator<First> first_converter; typedef typename first_converter::type first_type; typedef Base base_type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED flatten_view_iterator(First const& first, Base const& base) : first(first), base(base) {} - + first_type first; base_type base; }; @@ -50,13 +52,14 @@ namespace boost { namespace fusion { namespace detail struct make_descent_cons { typedef cons<Iterator> type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type apply(Iterator const& it) { return type(it); } }; - + template<class Iterator> struct make_descent_cons<Iterator, typename enable_if<traits::is_sequence< @@ -67,20 +70,21 @@ namespace boost { namespace fusion { namespace detail typedef typename remove_reference<typename result_of::deref<Iterator>::type>::type sub_sequence; - + typedef typename result_of::begin<sub_sequence>::type sub_begin; - + typedef cons<Iterator, typename make_descent_cons<sub_begin>::type> type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type apply(Iterator const& it) { return type(it, make_descent_cons<sub_begin>::apply( fusion::begin(*it))); } }; - + template<class Cons, class Base> struct build_flatten_view_iterator; @@ -88,26 +92,28 @@ namespace boost { namespace fusion { namespace detail struct build_flatten_view_iterator<cons<Car>, Base> { typedef flatten_view_iterator<Car, Base> type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type apply(cons<Car> const& cons, Base const& base) { return type(cons.car, base); } }; - + template<class Car, class Cdr, class Base> struct build_flatten_view_iterator<cons<Car, Cdr>, Base> { typedef flatten_view_iterator<Car, Base> next_base; typedef build_flatten_view_iterator<Cdr, next_base> next; typedef typename next::type type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type apply(cons<Car, Cdr> const& cons, Base const& base) { return next::apply(cons.cdr, next_base(cons.car, base)); } }; - + template<class Base, class Iterator, class = void> struct seek_descent { @@ -117,14 +123,15 @@ namespace boost { namespace fusion { namespace detail build_flatten_view_iterator<cons_type, Base> build_flatten_view_iterator_; typedef typename build_flatten_view_iterator_::type type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type apply(Base const& base, Iterator const& it) { return build_flatten_view_iterator_::apply( make_descent_cons_::apply(it), base); } }; - + template<class Base, class Iterator> struct seek_descent<Base, Iterator, typename enable_if< @@ -132,7 +139,8 @@ namespace boost { namespace fusion { namespace detail typename result_of::value_of<Base>::type>::type> >::type> { typedef typename result_of::next<Base>::type type; - + + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type apply(Base const& base, Iterator const&) { return fusion::next(base); @@ -151,10 +159,11 @@ namespace boost { namespace fusion { namespace extension typedef typename Iterator::first_type first_type; typedef typename Iterator::base_type base_type; typedef typename result_of::next<first_type>::type next_type; - + typedef detail::seek_descent<base_type, next_type> seek_descent; typedef typename seek_descent::type type; + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type call(Iterator const& it) { @@ -162,7 +171,7 @@ namespace boost { namespace fusion { namespace extension } }; }; - + template<> struct deref_impl<flatten_view_iterator_tag> { @@ -173,6 +182,7 @@ namespace boost { namespace fusion { namespace extension result_of::deref<typename Iterator::first_type>::type type; + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static inline type call(Iterator const& it) { @@ -180,13 +190,13 @@ namespace boost { namespace fusion { namespace extension } }; }; - + template<> struct value_of_impl<flatten_view_iterator_tag> { template<typename Iterator> struct apply - { + { typedef typename result_of::value_of<typename Iterator::first_type>::type type; @@ -194,6 +204,15 @@ namespace boost { namespace fusion { namespace extension }; }}} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename First, typename Base> + struct iterator_traits< ::boost::fusion::flatten_view_iterator<First, Base> > + { }; +} +#endif + #endif diff --git a/boost/fusion/view/iterator_range/detail/at_impl.hpp b/boost/fusion/view/iterator_range/detail/at_impl.hpp index 0626ae2ec5..20f1758310 100644 --- a/boost/fusion/view/iterator_range/detail/at_impl.hpp +++ b/boost/fusion/view/iterator_range/detail/at_impl.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion typedef typename result_of::advance<begin_type,N>::type pos; typedef typename result_of::deref<pos>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Seq& s) { diff --git a/boost/fusion/view/iterator_range/detail/begin_impl.hpp b/boost/fusion/view/iterator_range/detail/begin_impl.hpp index e34b6ede30..7e00dec091 100644 --- a/boost/fusion/view/iterator_range/detail/begin_impl.hpp +++ b/boost/fusion/view/iterator_range/detail/begin_impl.hpp @@ -7,6 +7,8 @@ #if !defined(FUSION_BEGIN_IMPL_05062005_1226) #define FUSION_BEGIN_IMPL_05062005_1226 +#include <boost/fusion/support/config.hpp> + namespace boost { namespace fusion { struct iterator_range_tag; @@ -24,7 +26,7 @@ namespace boost { namespace fusion { typedef typename Sequence::begin_type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/iterator_range/detail/end_impl.hpp b/boost/fusion/view/iterator_range/detail/end_impl.hpp index 2428198cb8..b76aa91cd5 100644 --- a/boost/fusion/view/iterator_range/detail/end_impl.hpp +++ b/boost/fusion/view/iterator_range/detail/end_impl.hpp @@ -7,6 +7,8 @@ #if !defined(FUSION_END_IMPL_05062005_1226) #define FUSION_END_IMPL_05062005_1226 +#include <boost/fusion/support/config.hpp> + namespace boost { namespace fusion { struct iterator_range_tag; @@ -24,7 +26,7 @@ namespace boost { namespace fusion { typedef typename Sequence::end_type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp b/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp index 7dc4506c79..d35e580f8e 100644 --- a/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp +++ b/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp @@ -48,8 +48,8 @@ namespace boost { namespace fusion } template <typename Sequence, typename T> - BOOST_FUSION_GPU_ENABLED - typename + BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED + inline typename lazy_enable_if< traits::is_sequence<Sequence> , result_of::push_back<Sequence const, T> @@ -57,8 +57,8 @@ namespace boost { namespace fusion push_back(Sequence const& seq, T const& x); template <typename Sequence, typename T> - BOOST_FUSION_GPU_ENABLED - typename + BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED + inline typename lazy_enable_if< traits::is_sequence<Sequence> , result_of::push_front<Sequence const, T> @@ -152,7 +152,7 @@ namespace boost { namespace fusion { namespace detail > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Stack const& stack) { //return segment_sequence( @@ -199,7 +199,7 @@ namespace boost { namespace fusion { namespace detail > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Stack const& stack) { // return iterator_range(begin(car(cdr(stack_begin))), end(front(car(stack_begin)))); @@ -212,7 +212,7 @@ namespace boost { namespace fusion { namespace detail { typedef typename Stack::cdr_type type; // nil_ - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Stack const &stack) { return stack.cdr; @@ -298,7 +298,7 @@ namespace boost { namespace fusion { namespace detail > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Stack const& stack) { // return segment_sequence( @@ -345,7 +345,7 @@ namespace boost { namespace fusion { namespace detail > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Stack const& stack) { // return iterator_range(begin(front(car(stack_end))), begin(car(cdr(stack_end)))); @@ -358,7 +358,7 @@ namespace boost { namespace fusion { namespace detail { typedef typename Stack::cdr_type type; // nil_ - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Stack const& stack) { return stack.cdr; @@ -437,7 +437,7 @@ namespace boost { namespace fusion { namespace detail > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(StackBegin stack_begin, StackEnd stack_end) { //return segment_sequence( @@ -471,7 +471,7 @@ namespace boost { namespace fusion { namespace detail typename impl::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(StackBegin stack_begin, StackEnd stack_end) { return impl::call(stack_begin.cdr, stack_end.cdr); @@ -501,7 +501,7 @@ namespace boost { namespace fusion { namespace detail segment_sequence<segment_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(StackBegin stack_begin, StackEnd stack_end) { //return segment_sequence( @@ -531,7 +531,7 @@ namespace boost { namespace fusion { namespace detail typedef typename impl::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Begin const& begin, End const& end) { return impl::call( diff --git a/boost/fusion/view/iterator_range/detail/segments_impl.hpp b/boost/fusion/view/iterator_range/detail/segments_impl.hpp index 9d570cf1f0..bbf4c45ad3 100644 --- a/boost/fusion/view/iterator_range/detail/segments_impl.hpp +++ b/boost/fusion/view/iterator_range/detail/segments_impl.hpp @@ -41,7 +41,7 @@ namespace boost { namespace fusion typename result_of::segments<typename impl::type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence & seq) { return fusion::segments(impl::call(seq.first, seq.last)); diff --git a/boost/fusion/view/iterator_range/iterator_range.hpp b/boost/fusion/view/iterator_range/iterator_range.hpp index f5aafd4a19..272abcd911 100644 --- a/boost/fusion/view/iterator_range/iterator_range.hpp +++ b/boost/fusion/view/iterator_range/iterator_range.hpp @@ -44,7 +44,7 @@ namespace boost { namespace fusion typedef typename traits::category_of<begin_type>::type category; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED iterator_range(First const& in_first, Last const& in_last) : first(convert_iterator<First>::call(in_first)) , last(convert_iterator<Last>::call(in_last)) {} diff --git a/boost/fusion/view/joint_view/detail/begin_impl.hpp b/boost/fusion/view/joint_view/detail/begin_impl.hpp index f58d129042..b7a961a7f2 100644 --- a/boost/fusion/view/joint_view/detail/begin_impl.hpp +++ b/boost/fusion/view/joint_view/detail/begin_impl.hpp @@ -43,21 +43,21 @@ namespace boost { namespace fusion >::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s, mpl::true_) { return s.concat(); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s, mpl::false_) { return type(s.first(), s.concat()); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/joint_view/detail/deref_data_impl.hpp b/boost/fusion/view/joint_view/detail/deref_data_impl.hpp index 02780d99d9..2d5f8317e1 100644 --- a/boost/fusion/view/joint_view/detail/deref_data_impl.hpp +++ b/boost/fusion/view/joint_view/detail/deref_data_impl.hpp @@ -26,7 +26,7 @@ namespace boost { namespace fusion { namespace extension result_of::deref_data<typename It::first_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(It const& it) { diff --git a/boost/fusion/view/joint_view/detail/end_impl.hpp b/boost/fusion/view/joint_view/detail/end_impl.hpp index b9e0113815..0b4b9b0abd 100644 --- a/boost/fusion/view/joint_view/detail/end_impl.hpp +++ b/boost/fusion/view/joint_view/detail/end_impl.hpp @@ -28,7 +28,7 @@ namespace boost { namespace fusion { typedef typename Sequence::concat_last_type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/joint_view/detail/next_impl.hpp b/boost/fusion/view/joint_view/detail/next_impl.hpp index a3c066d1f3..a7d18757da 100644 --- a/boost/fusion/view/joint_view/detail/next_impl.hpp +++ b/boost/fusion/view/joint_view/detail/next_impl.hpp @@ -45,21 +45,21 @@ namespace boost { namespace fusion >::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i, mpl::true_) { return i.concat; } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i, mpl::false_) { return type(fusion::next(i.first), i.concat); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/joint_view/joint_view.hpp b/boost/fusion/view/joint_view/joint_view.hpp index 3ad3191420..676cbc54dd 100644 --- a/boost/fusion/view/joint_view/joint_view.hpp +++ b/boost/fusion/view/joint_view/joint_view.hpp @@ -56,17 +56,17 @@ namespace boost { namespace fusion result_of::size<Sequence1>::value + result_of::size<Sequence2>::value> size; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED joint_view(Sequence1& in_seq1, Sequence2& in_seq2) : seq1(in_seq1) , seq2(in_seq2) {} - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED first_type first() const { return fusion::begin(seq1); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED concat_type concat() const { return fusion::begin(seq2); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED concat_last_type concat_last() const { return fusion::end(seq2); } private: diff --git a/boost/fusion/view/joint_view/joint_view_iterator.hpp b/boost/fusion/view/joint_view/joint_view_iterator.hpp index 9858474078..ddd1341ee1 100644 --- a/boost/fusion/view/joint_view/joint_view_iterator.hpp +++ b/boost/fusion/view/joint_view/joint_view_iterator.hpp @@ -41,7 +41,7 @@ namespace boost { namespace fusion typedef Category category; BOOST_STATIC_ASSERT((!result_of::equal_to<first_type, last_type>::value)); - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED joint_view_iterator(First const& in_first, Concat const& in_concat) : first(first_converter::call(in_first)) , concat(concat_converter::call(in_concat)) @@ -56,6 +56,15 @@ namespace boost { namespace fusion }; }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename Category, typename First, typename Last, typename Concat> + struct iterator_traits< ::boost::fusion::joint_view_iterator<Category, First, Last, Concat> > + { }; +} +#endif + #endif diff --git a/boost/fusion/view/nview/detail/advance_impl.hpp b/boost/fusion/view/nview/detail/advance_impl.hpp index ad82983eac..7c74a386bb 100644 --- a/boost/fusion/view/nview/detail/advance_impl.hpp +++ b/boost/fusion/view/nview/detail/advance_impl.hpp @@ -12,7 +12,7 @@ #include <boost/mpl/advance.hpp> #include <boost/fusion/iterator/advance.hpp> -namespace boost { namespace fusion +namespace boost { namespace fusion { struct nview_iterator_tag; @@ -36,7 +36,7 @@ namespace boost { namespace fusion typedef nview_iterator<sequence_type, typename mpl::advance<iterator_type, Dist>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/nview/detail/at_impl.hpp b/boost/fusion/view/nview/detail/at_impl.hpp index 45f9faf6f6..b9f41defcd 100644 --- a/boost/fusion/view/nview/detail/at_impl.hpp +++ b/boost/fusion/view/nview/detail/at_impl.hpp @@ -11,7 +11,7 @@ #include <boost/fusion/support/config.hpp> #include <boost/fusion/sequence/intrinsic/at.hpp> -namespace boost { namespace fusion +namespace boost { namespace fusion { struct nview_tag; @@ -32,8 +32,8 @@ namespace boost { namespace fusion typedef typename result_of::at<index_type, N>::type index; typedef typename result_of::at<sequence_type, index>::type type; - BOOST_FUSION_GPU_ENABLED - static type + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED + static type call(Sequence& seq) { return fusion::at<index>(seq.seq); diff --git a/boost/fusion/view/nview/detail/begin_impl.hpp b/boost/fusion/view/nview/detail/begin_impl.hpp index ca600b9a16..bab5e221c9 100644 --- a/boost/fusion/view/nview/detail/begin_impl.hpp +++ b/boost/fusion/view/nview/detail/begin_impl.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion typedef nview_iterator<Sequence, typename mpl::begin<index_type>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { return type(s); diff --git a/boost/fusion/view/nview/detail/deref_impl.hpp b/boost/fusion/view/nview/detail/deref_impl.hpp index bbdb982528..85991021b6 100644 --- a/boost/fusion/view/nview/detail/deref_impl.hpp +++ b/boost/fusion/view/nview/detail/deref_impl.hpp @@ -34,7 +34,7 @@ namespace boost { namespace fusion typedef typename result_of::at< typename sequence_type::sequence_type, index>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { return at<index>(i.seq.seq); diff --git a/boost/fusion/view/nview/detail/distance_impl.hpp b/boost/fusion/view/nview/detail/distance_impl.hpp index e3e5a9a086..a036300f77 100644 --- a/boost/fusion/view/nview/detail/distance_impl.hpp +++ b/boost/fusion/view/nview/detail/distance_impl.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion typename First::first_type, typename Last::first_type >::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(First const& /*first*/, Last const& /*last*/) { diff --git a/boost/fusion/view/nview/detail/end_impl.hpp b/boost/fusion/view/nview/detail/end_impl.hpp index d36260dbb7..0a6efe560d 100644 --- a/boost/fusion/view/nview/detail/end_impl.hpp +++ b/boost/fusion/view/nview/detail/end_impl.hpp @@ -36,7 +36,7 @@ namespace boost { namespace fusion typedef nview_iterator<Sequence, typename mpl::end<index_type>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { return type(s); diff --git a/boost/fusion/view/nview/detail/next_impl.hpp b/boost/fusion/view/nview/detail/next_impl.hpp index 5193bfe655..3c30409647 100644 --- a/boost/fusion/view/nview/detail/next_impl.hpp +++ b/boost/fusion/view/nview/detail/next_impl.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion typedef nview_iterator<sequence_type, typename mpl::next<first_type>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/nview/detail/nview_impl.hpp b/boost/fusion/view/nview/detail/nview_impl.hpp index 6c7a3e21d1..e0d9335638 100644 --- a/boost/fusion/view/nview/detail/nview_impl.hpp +++ b/boost/fusion/view/nview/detail/nview_impl.hpp @@ -63,7 +63,7 @@ namespace boost { namespace fusion { namespace result_of namespace boost { namespace fusion { template<BOOST_PP_ENUM_PARAMS(N, int I), typename Sequence> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED inline nview<Sequence, mpl::vector_c<int, BOOST_PP_ENUM_PARAMS(N, I)> > as_nview(Sequence& s) { diff --git a/boost/fusion/view/nview/detail/prior_impl.hpp b/boost/fusion/view/nview/detail/prior_impl.hpp index 374b45f669..470c5bd323 100644 --- a/boost/fusion/view/nview/detail/prior_impl.hpp +++ b/boost/fusion/view/nview/detail/prior_impl.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion typedef nview_iterator<sequence_type, typename mpl::prior<first_type>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/nview/nview.hpp b/boost/fusion/view/nview/nview.hpp index 45b7380bdf..2e257c81de 100644 --- a/boost/fusion/view/nview/nview.hpp +++ b/boost/fusion/view/nview/nview.hpp @@ -40,7 +40,7 @@ namespace boost { namespace fusion #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES template <typename T> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename add_reference<T>::type operator()(T& x) const { @@ -48,7 +48,7 @@ namespace boost { namespace fusion } #else template <typename T> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<addref(T)>::type operator()(T&& x) const { @@ -68,7 +68,7 @@ namespace boost { namespace fusion {}; template <typename T> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T>::type>::type operator()(T& x) const { @@ -76,7 +76,7 @@ namespace boost { namespace fusion } template <typename T> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename add_reference<typename add_const<T>::type>::type operator()(T const& x) const { @@ -108,7 +108,8 @@ namespace boost { namespace fusion typedef typename result_of::as_vector<transform_view_type>::type sequence_type; - BOOST_FUSION_GPU_ENABLED explicit nview(Sequence& val) + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED + explicit nview(Sequence& val) : seq(sequence_type(transform_view_type(val, transform_type()))) {} diff --git a/boost/fusion/view/nview/nview_iterator.hpp b/boost/fusion/view/nview/nview_iterator.hpp index c614cbbb92..aeaf4620b8 100644 --- a/boost/fusion/view/nview/nview_iterator.hpp +++ b/boost/fusion/view/nview/nview_iterator.hpp @@ -42,7 +42,8 @@ namespace boost { namespace fusion typedef Sequence sequence_type; typedef mpl_iterator<Pos> first_type; - BOOST_FUSION_GPU_ENABLED explicit nview_iterator(Sequence& in_seq) + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED + explicit nview_iterator(Sequence& in_seq) : seq(in_seq) {} Sequence& seq; @@ -54,6 +55,15 @@ namespace boost { namespace fusion }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename Sequence, typename Pos> + struct iterator_traits< ::boost::fusion::nview_iterator<Sequence, Pos> > + { }; +} +#endif + #endif diff --git a/boost/fusion/view/repetitive_view/detail/begin_impl.hpp b/boost/fusion/view/repetitive_view/detail/begin_impl.hpp index 3da6b21dbf..9a27156c85 100644 --- a/boost/fusion/view/repetitive_view/detail/begin_impl.hpp +++ b/boost/fusion/view/repetitive_view/detail/begin_impl.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion typedef repetitive_view_iterator<sequence_type, typename result_of::begin<sequence_type>::type > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(View const& v) { return type(v.seq); diff --git a/boost/fusion/view/repetitive_view/detail/deref_impl.hpp b/boost/fusion/view/repetitive_view/detail/deref_impl.hpp index c54ff38ef8..c96ef5eba5 100644 --- a/boost/fusion/view/repetitive_view/detail/deref_impl.hpp +++ b/boost/fusion/view/repetitive_view/detail/deref_impl.hpp @@ -30,7 +30,7 @@ namespace boost { namespace fusion result_of::deref<typename Iterator::pos_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { return *i.pos; diff --git a/boost/fusion/view/repetitive_view/detail/end_impl.hpp b/boost/fusion/view/repetitive_view/detail/end_impl.hpp index ca1c270f95..af1fa6ee44 100644 --- a/boost/fusion/view/repetitive_view/detail/end_impl.hpp +++ b/boost/fusion/view/repetitive_view/detail/end_impl.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion typedef repetitive_view_iterator<sequence_type, typename result_of::end<sequence_type>::type > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(View const& v) { return type(v.seq,end(v.seq)); diff --git a/boost/fusion/view/repetitive_view/detail/next_impl.hpp b/boost/fusion/view/repetitive_view/detail/next_impl.hpp index acefd513c0..fab7540814 100644 --- a/boost/fusion/view/repetitive_view/detail/next_impl.hpp +++ b/boost/fusion/view/repetitive_view/detail/next_impl.hpp @@ -42,7 +42,7 @@ namespace boost { namespace fusion > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { return type(i.seq, next(i.pos)); @@ -59,7 +59,7 @@ namespace boost { namespace fusion > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { return type(i.seq); @@ -80,7 +80,7 @@ namespace boost { namespace fusion typedef Iterator type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { return type(i); diff --git a/boost/fusion/view/repetitive_view/repetitive_view.hpp b/boost/fusion/view/repetitive_view/repetitive_view.hpp index ab0a3b181f..32718e047e 100644 --- a/boost/fusion/view/repetitive_view/repetitive_view.hpp +++ b/boost/fusion/view/repetitive_view/repetitive_view.hpp @@ -38,7 +38,7 @@ namespace boost { namespace fusion mpl::if_<traits::is_view<Sequence>, Sequence, sequence_type&>::type stored_seq_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED repetitive_view(Sequence& in_seq) : seq(in_seq) {} diff --git a/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp b/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp index 7d5d139d66..74cc723e41 100644 --- a/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp +++ b/boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp @@ -5,8 +5,8 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ -#if !defined(BOOST_FUSION_REPETITIVE_VIEW_ITERATOR_HPP_INCLUDED) -#define BOOST_FUSION_REPETITIVE_VIEW_HPP_ITERATOR_INCLUDED +#ifndef BOOST_FUSION_REPETITIVE_VIEW_ITERATOR_HPP_INCLUDED +#define BOOST_FUSION_REPETITIVE_VIEW_ITERATOR_HPP_INCLUDED #include <boost/fusion/support/config.hpp> #include <boost/fusion/support/iterator_base.hpp> @@ -36,16 +36,16 @@ namespace boost { namespace fusion typedef typename convert_iterator<typename result_of::end<Sequence>::type>::type end_type; typedef single_pass_traversal_tag category; - BOOST_FUSION_GPU_ENABLED explicit repetitive_view_iterator(Sequence& in_seq) + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED + explicit repetitive_view_iterator(Sequence& in_seq) : seq(in_seq), pos(begin(in_seq)) {} - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED repetitive_view_iterator(Sequence& in_seq, pos_type const& in_pos) : seq(in_seq), pos(in_pos) {} Sequence& seq; pos_type pos; - private: // silence MSVC warning C4512: assignment operator could not be generated @@ -53,5 +53,14 @@ namespace boost { namespace fusion }; }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename Sequence, typename Pos> + struct iterator_traits< ::boost::fusion::repetitive_view_iterator<Sequence, Pos> > + { }; +} +#endif + #endif diff --git a/boost/fusion/view/reverse_view/detail/advance_impl.hpp b/boost/fusion/view/reverse_view/detail/advance_impl.hpp index 1304d0a9c2..42b3bd1908 100644 --- a/boost/fusion/view/reverse_view/detail/advance_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/advance_impl.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion { typedef typename result_of::advance<first_type, negative_dist>::type advanced_type; typedef reverse_view_iterator<advanced_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/reverse_view/detail/at_impl.hpp b/boost/fusion/view/reverse_view/detail/at_impl.hpp index ebad8f3524..d1fc7715e8 100644 --- a/boost/fusion/view/reverse_view/detail/at_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/at_impl.hpp @@ -30,7 +30,7 @@ namespace boost { namespace fusion { namespace extension result_of::at<typename Seq::seq_type, real_n>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Seq& seq) { diff --git a/boost/fusion/view/reverse_view/detail/begin_impl.hpp b/boost/fusion/view/reverse_view/detail/begin_impl.hpp index 2f20df57a4..913725ede4 100644 --- a/boost/fusion/view/reverse_view/detail/begin_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/begin_impl.hpp @@ -27,7 +27,7 @@ namespace boost { namespace fusion { typedef reverse_view_iterator<typename Sequence::last_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence const& s) { diff --git a/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp b/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp index 20d381baba..e93b8fba9c 100644 --- a/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/deref_data_impl.hpp @@ -26,7 +26,7 @@ namespace boost { namespace fusion { namespace extension result_of::deref_data<typename It::first_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(It const& it) { diff --git a/boost/fusion/view/reverse_view/detail/deref_impl.hpp b/boost/fusion/view/reverse_view/detail/deref_impl.hpp index 530921fe3a..9ea60d812d 100644 --- a/boost/fusion/view/reverse_view/detail/deref_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/deref_impl.hpp @@ -34,7 +34,7 @@ namespace boost { namespace fusion >::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/reverse_view/detail/distance_impl.hpp b/boost/fusion/view/reverse_view/detail/distance_impl.hpp index 3a5fdc6114..49436c26b6 100644 --- a/boost/fusion/view/reverse_view/detail/distance_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/distance_impl.hpp @@ -33,7 +33,7 @@ namespace boost { namespace fusion { typedef typename Last::first_type last_type; typedef typename result_of::distance<last_type, first_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(First const& first, Last const& last) { diff --git a/boost/fusion/view/reverse_view/detail/end_impl.hpp b/boost/fusion/view/reverse_view/detail/end_impl.hpp index 1747d64f33..06602c0eda 100644 --- a/boost/fusion/view/reverse_view/detail/end_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/end_impl.hpp @@ -27,7 +27,7 @@ namespace boost { namespace fusion { typedef reverse_view_iterator<typename Sequence::first_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence const& s) { diff --git a/boost/fusion/view/reverse_view/detail/next_impl.hpp b/boost/fusion/view/reverse_view/detail/next_impl.hpp index 1aaa692023..58c1f5f71a 100644 --- a/boost/fusion/view/reverse_view/detail/next_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/next_impl.hpp @@ -33,7 +33,7 @@ namespace boost { namespace fusion typedef reverse_view_iterator<typename wrapped::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/reverse_view/detail/prior_impl.hpp b/boost/fusion/view/reverse_view/detail/prior_impl.hpp index 4007ad4d97..69d18501cd 100644 --- a/boost/fusion/view/reverse_view/detail/prior_impl.hpp +++ b/boost/fusion/view/reverse_view/detail/prior_impl.hpp @@ -33,7 +33,7 @@ namespace boost { namespace fusion typedef reverse_view_iterator<typename wrapped::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/reverse_view/reverse_view.hpp b/boost/fusion/view/reverse_view/reverse_view.hpp index 3b134d5f26..0a9aca27f1 100644 --- a/boost/fusion/view/reverse_view/reverse_view.hpp +++ b/boost/fusion/view/reverse_view/reverse_view.hpp @@ -50,14 +50,14 @@ namespace boost { namespace fusion bidirectional_traversal_tag , typename traits::category_of<first_type>::type>::value)); - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED reverse_view(Sequence& in_seq) : seq(in_seq) {} - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED first_type first() const { return fusion::begin(seq); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED last_type last() const { return fusion::end(seq); } typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq; diff --git a/boost/fusion/view/reverse_view/reverse_view_iterator.hpp b/boost/fusion/view/reverse_view/reverse_view_iterator.hpp index 9de2169ef1..a73e4eeafb 100644 --- a/boost/fusion/view/reverse_view/reverse_view_iterator.hpp +++ b/boost/fusion/view/reverse_view/reverse_view_iterator.hpp @@ -42,7 +42,7 @@ namespace boost { namespace fusion bidirectional_traversal_tag , category>::value)); - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED reverse_view_iterator(First const& in_first) : first(converter::call(in_first)) {} @@ -54,5 +54,14 @@ namespace boost { namespace fusion }; }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename First> + struct iterator_traits< ::boost::fusion::reverse_view_iterator<First> > + { }; +} +#endif + #endif diff --git a/boost/fusion/view/single_view/detail/advance_impl.hpp b/boost/fusion/view/single_view/detail/advance_impl.hpp index 9dd9e4d712..5af22321b9 100644 --- a/boost/fusion/view/single_view/detail/advance_impl.hpp +++ b/boost/fusion/view/single_view/detail/advance_impl.hpp @@ -34,7 +34,7 @@ namespace boost { namespace fusion typename mpl::plus<typename Iterator::position, Dist>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/single_view/detail/at_impl.hpp b/boost/fusion/view/single_view/detail/at_impl.hpp index b63497c8d2..6c4c7579b6 100644 --- a/boost/fusion/view/single_view/detail/at_impl.hpp +++ b/boost/fusion/view/single_view/detail/at_impl.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion BOOST_MPL_ASSERT((mpl::equal_to<N, mpl::int_<0> >)); typedef typename Sequence::value_type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& seq) { diff --git a/boost/fusion/view/single_view/detail/begin_impl.hpp b/boost/fusion/view/single_view/detail/begin_impl.hpp index 63e4292348..d6bca8f6b5 100644 --- a/boost/fusion/view/single_view/detail/begin_impl.hpp +++ b/boost/fusion/view/single_view/detail/begin_impl.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion { typedef single_view_iterator<Sequence, mpl::int_<0> > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& seq) { diff --git a/boost/fusion/view/single_view/detail/deref_impl.hpp b/boost/fusion/view/single_view/detail/deref_impl.hpp index ad50a41357..acb90d836b 100644 --- a/boost/fusion/view/single_view/detail/deref_impl.hpp +++ b/boost/fusion/view/single_view/detail/deref_impl.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion BOOST_MPL_ASSERT((mpl::equal_to<typename Iterator::position, mpl::int_<0> >)); typedef typename Iterator::value_type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/single_view/detail/distance_impl.hpp b/boost/fusion/view/single_view/detail/distance_impl.hpp index 73231b4152..9cd85fdc31 100644 --- a/boost/fusion/view/single_view/detail/distance_impl.hpp +++ b/boost/fusion/view/single_view/detail/distance_impl.hpp @@ -30,7 +30,7 @@ namespace boost { namespace fusion typedef typename mpl::minus<typename Last::position, typename First::position>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(First const& /*first*/, Last const& /*last*/) { diff --git a/boost/fusion/view/single_view/detail/end_impl.hpp b/boost/fusion/view/single_view/detail/end_impl.hpp index 50a7c56240..d662ac246b 100644 --- a/boost/fusion/view/single_view/detail/end_impl.hpp +++ b/boost/fusion/view/single_view/detail/end_impl.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion { typedef single_view_iterator<Sequence, mpl::int_<1> > type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& seq) { diff --git a/boost/fusion/view/single_view/detail/next_impl.hpp b/boost/fusion/view/single_view/detail/next_impl.hpp index d5e0ac8037..41c658f322 100644 --- a/boost/fusion/view/single_view/detail/next_impl.hpp +++ b/boost/fusion/view/single_view/detail/next_impl.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion typename mpl::next<typename Iterator::position>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/single_view/detail/prior_impl.hpp b/boost/fusion/view/single_view/detail/prior_impl.hpp index c34e481a27..823f96e5a5 100644 --- a/boost/fusion/view/single_view/detail/prior_impl.hpp +++ b/boost/fusion/view/single_view/detail/prior_impl.hpp @@ -33,7 +33,7 @@ namespace boost { namespace fusion typename mpl::prior<typename Iterator::position>::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/single_view/single_view.hpp b/boost/fusion/view/single_view/single_view.hpp index 36c2c931c0..a4437902c1 100644 --- a/boost/fusion/view/single_view/single_view.hpp +++ b/boost/fusion/view/single_view/single_view.hpp @@ -43,18 +43,19 @@ namespace boost { namespace fusion typedef mpl::int_<1> size; typedef T value_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED single_view() : val() {} - BOOST_FUSION_GPU_ENABLED explicit single_view(typename detail::call_param<T>::type in_val) + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED + explicit single_view(typename detail::call_param<T>::type in_val) : val(in_val) {} value_type val; }; template <typename T> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED inline single_view<typename detail::as_fusion_element<T>::type> make_single_view(T const& v) { diff --git a/boost/fusion/view/single_view/single_view_iterator.hpp b/boost/fusion/view/single_view/single_view_iterator.hpp index 128c1cae66..0f3e2744b5 100644 --- a/boost/fusion/view/single_view/single_view_iterator.hpp +++ b/boost/fusion/view/single_view/single_view_iterator.hpp @@ -40,7 +40,8 @@ namespace boost { namespace fusion typedef Pos position; typedef SingleView single_view_type; - BOOST_FUSION_GPU_ENABLED explicit single_view_iterator(single_view_type& in_view) + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED + explicit single_view_iterator(single_view_type& in_view) : view(in_view) {} SingleView& view; @@ -50,6 +51,15 @@ namespace boost { namespace fusion }; }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename SingleView, typename Pos> + struct iterator_traits< ::boost::fusion::single_view_iterator<SingleView, Pos> > + { }; +} +#endif + #if defined (BOOST_MSVC) # pragma warning(pop) #endif diff --git a/boost/fusion/view/transform_view/detail/advance_impl.hpp b/boost/fusion/view/transform_view/detail/advance_impl.hpp index ae8a84ce63..12dfabec92 100644 --- a/boost/fusion/view/transform_view/detail/advance_impl.hpp +++ b/boost/fusion/view/transform_view/detail/advance_impl.hpp @@ -39,7 +39,7 @@ namespace boost { namespace fusion typedef typename Iterator::transform_type transform_type; typedef transform_view_iterator<advanced_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { @@ -62,7 +62,7 @@ namespace boost { namespace fusion typedef typename Iterator::transform_type transform_type; typedef transform_view_iterator2<advanced1_type, advanced2_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/transform_view/detail/at_impl.hpp b/boost/fusion/view/transform_view/detail/at_impl.hpp index 5c6dd8fb0d..d2045bc280 100644 --- a/boost/fusion/view/transform_view/detail/at_impl.hpp +++ b/boost/fusion/view/transform_view/detail/at_impl.hpp @@ -33,7 +33,7 @@ namespace boost { namespace fusion { typedef typename boost::fusion::result_of::at<typename Seq::sequence_type, N>::type value_type; typedef typename mpl::apply<transform_type, value_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Seq& seq) { return seq.f(boost::fusion::at<N>(seq.seq)); @@ -53,7 +53,7 @@ namespace boost { namespace fusion { typedef typename boost::fusion::result_of::at<typename Seq::sequence2_type, N>::type value2_type; typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Seq& seq) { return seq.f(boost::fusion::at<N>(seq.seq1), boost::fusion::at<N>(seq.seq2)); diff --git a/boost/fusion/view/transform_view/detail/begin_impl.hpp b/boost/fusion/view/transform_view/detail/begin_impl.hpp index 7c40505ae2..da3f763ab1 100644 --- a/boost/fusion/view/transform_view/detail/begin_impl.hpp +++ b/boost/fusion/view/transform_view/detail/begin_impl.hpp @@ -34,7 +34,7 @@ namespace boost { namespace fusion typedef typename Sequence::transform_type transform_type; typedef transform_view_iterator<first_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { @@ -55,7 +55,7 @@ namespace boost { namespace fusion typedef typename Sequence::transform_type transform_type; typedef transform_view_iterator2<first1_type, first2_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/transform_view/detail/deref_impl.hpp b/boost/fusion/view/transform_view/detail/deref_impl.hpp index 35dacbd1d7..646da57c22 100644 --- a/boost/fusion/view/transform_view/detail/deref_impl.hpp +++ b/boost/fusion/view/transform_view/detail/deref_impl.hpp @@ -37,7 +37,7 @@ namespace boost { namespace fusion typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type; typedef typename mpl::apply<transform_type, value_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { @@ -63,7 +63,7 @@ namespace boost { namespace fusion typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type; typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/transform_view/detail/distance_impl.hpp b/boost/fusion/view/transform_view/detail/distance_impl.hpp index ecbc8c5dd0..644430559d 100644 --- a/boost/fusion/view/transform_view/detail/distance_impl.hpp +++ b/boost/fusion/view/transform_view/detail/distance_impl.hpp @@ -29,7 +29,7 @@ namespace boost { namespace fusion { struct apply : result_of::distance<typename First::first_type, typename Last::first_type> { - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static typename result_of::distance<typename First::first_type, typename Last::first_type>::type call(First const& first, Last const& last) @@ -47,7 +47,7 @@ namespace boost { namespace fusion { struct apply : result_of::distance<typename First::first1_type, typename Last::first1_type> { - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static typename result_of::distance<typename First::first1_type, typename Last::first1_type>::type call(First const& first, Last const& last) diff --git a/boost/fusion/view/transform_view/detail/end_impl.hpp b/boost/fusion/view/transform_view/detail/end_impl.hpp index 58e161b1f6..3a84e04093 100644 --- a/boost/fusion/view/transform_view/detail/end_impl.hpp +++ b/boost/fusion/view/transform_view/detail/end_impl.hpp @@ -34,7 +34,7 @@ namespace boost { namespace fusion typedef typename Sequence::transform_type transform_type; typedef transform_view_iterator<last_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { @@ -55,7 +55,7 @@ namespace boost { namespace fusion typedef typename Sequence::transform_type transform_type; typedef transform_view_iterator2<last1_type, last2_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& s) { diff --git a/boost/fusion/view/transform_view/detail/next_impl.hpp b/boost/fusion/view/transform_view/detail/next_impl.hpp index cebba59526..ce22d19edc 100644 --- a/boost/fusion/view/transform_view/detail/next_impl.hpp +++ b/boost/fusion/view/transform_view/detail/next_impl.hpp @@ -38,7 +38,7 @@ namespace boost { namespace fusion typedef typename Iterator::transform_type transform_type; typedef transform_view_iterator<next_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { @@ -61,7 +61,7 @@ namespace boost { namespace fusion typedef typename Iterator::transform_type transform_type; typedef transform_view_iterator2<next1_type, next2_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/transform_view/detail/prior_impl.hpp b/boost/fusion/view/transform_view/detail/prior_impl.hpp index 19c802c622..ed6d742eef 100644 --- a/boost/fusion/view/transform_view/detail/prior_impl.hpp +++ b/boost/fusion/view/transform_view/detail/prior_impl.hpp @@ -39,7 +39,7 @@ namespace boost { namespace fusion typedef typename Iterator::transform_type transform_type; typedef transform_view_iterator<prior_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { @@ -62,7 +62,7 @@ namespace boost { namespace fusion typedef typename Iterator::transform_type transform_type; typedef transform_view_iterator2<prior1_type, prior2_type, transform_type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& i) { diff --git a/boost/fusion/view/transform_view/transform_view.hpp b/boost/fusion/view/transform_view/transform_view.hpp index d18f49c61c..4a6fc5b18c 100644 --- a/boost/fusion/view/transform_view/transform_view.hpp +++ b/boost/fusion/view/transform_view/transform_view.hpp @@ -56,20 +56,20 @@ namespace boost { namespace fusion typedef Sequence2 sequence2_type; typedef F transform_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED transform_view(Sequence1& in_seq1, Sequence2& in_seq2, F const& binop) : f(binop) , seq1(in_seq1) , seq2(in_seq2) {} - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED first1_type first1() const { return fusion::begin(seq1); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED first2_type first2() const { return fusion::begin(seq2); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED last1_type last1() const { return fusion::end(seq1); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED last2_type last2() const { return fusion::end(seq2); } transform_type f; @@ -100,15 +100,15 @@ namespace boost { namespace fusion typedef Sequence sequence_type; typedef F transform_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED transform_view(Sequence& in_seq, F const& in_f) : seq(in_seq) , f(in_f) {} - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED first_type first() const { return fusion::begin(seq); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED last_type last() const { return fusion::end(seq); } typename mpl::if_<traits::is_view<Sequence>, Sequence, Sequence&>::type seq; transform_type f; diff --git a/boost/fusion/view/transform_view/transform_view_iterator.hpp b/boost/fusion/view/transform_view/transform_view_iterator.hpp index 0762228fca..ab40bd748f 100644 --- a/boost/fusion/view/transform_view/transform_view_iterator.hpp +++ b/boost/fusion/view/transform_view/transform_view_iterator.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion typedef typename traits::category_of<first_type>::type category; typedef F transform_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED transform_view_iterator(First const& in_first, F const& in_f) : first(converter::call(in_first)), f(in_f) {} @@ -62,7 +62,7 @@ namespace boost { namespace fusion typedef typename traits::category_of<first1_type>::type category; typedef F transform_type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED transform_view_iterator2(First1 const& in_first1, First2 const& in_first2, F const& in_f) : first1(converter1::call(in_first1)), first2(converter2::call(in_first2)), f(in_f) {} @@ -76,5 +76,17 @@ namespace boost { namespace fusion }; }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename First, typename F> + struct iterator_traits< ::boost::fusion::transform_view_iterator<First, F> > + { }; + template <typename First1, typename First2, typename F> + struct iterator_traits< ::boost::fusion::transform_view_iterator2<First1, First2, F> > + { }; +} +#endif + #endif diff --git a/boost/fusion/view/zip_view/detail/advance_impl.hpp b/boost/fusion/view/zip_view/detail/advance_impl.hpp index 17012ac8b6..69134d949f 100644 --- a/boost/fusion/view/zip_view/detail/advance_impl.hpp +++ b/boost/fusion/view/zip_view/detail/advance_impl.hpp @@ -34,7 +34,7 @@ namespace boost { namespace fusion { }; template<typename It> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_advance(It)>::type operator()(const It& it) const { @@ -57,7 +57,7 @@ namespace boost { namespace fusion { typedef zip_view_iterator< typename result_of::transform<typename It::iterators, detail::poly_advance<N> >::type> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(It const& it) { diff --git a/boost/fusion/view/zip_view/detail/at_impl.hpp b/boost/fusion/view/zip_view/detail/at_impl.hpp index f92c981725..55c0fef177 100644 --- a/boost/fusion/view/zip_view/detail/at_impl.hpp +++ b/boost/fusion/view/zip_view/detail/at_impl.hpp @@ -44,7 +44,7 @@ namespace boost { namespace fusion }; template<typename Seq> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_at(Seq&)>::type operator()(Seq& seq) const { @@ -52,14 +52,14 @@ namespace boost { namespace fusion } template<typename Seq> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_at(Seq const&)>::type operator()(Seq const& seq) const { return fusion::at<N>(seq); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED unused_type operator()(unused_type const&) const { return unused_type(); @@ -82,7 +82,7 @@ namespace boost { namespace fusion typename result_of::transform< typename Seq::sequences, detail::poly_at<N> >::type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Seq& seq) { diff --git a/boost/fusion/view/zip_view/detail/begin_impl.hpp b/boost/fusion/view/zip_view/detail/begin_impl.hpp index 32be2c7d33..75e1375134 100644 --- a/boost/fusion/view/zip_view/detail/begin_impl.hpp +++ b/boost/fusion/view/zip_view/detail/begin_impl.hpp @@ -41,7 +41,7 @@ namespace boost { namespace fusion { }; template<typename Seq> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_begin(Seq&)>::type operator()(Seq& seq) const { @@ -49,14 +49,14 @@ namespace boost { namespace fusion { } template<typename Seq> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_begin(Seq const&)>::type operator()(Seq const& seq) const { return fusion::begin(seq); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED unused_type operator()(unused_type const&) const { return unused_type(); @@ -79,7 +79,7 @@ namespace boost { namespace fusion { typename result_of::transform<typename Sequence::sequences, detail::poly_begin>::type, typename Sequence::category> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& sequence) { diff --git a/boost/fusion/view/zip_view/detail/deref_impl.hpp b/boost/fusion/view/zip_view/detail/deref_impl.hpp index e9f091c3b5..df7e91ae12 100644 --- a/boost/fusion/view/zip_view/detail/deref_impl.hpp +++ b/boost/fusion/view/zip_view/detail/deref_impl.hpp @@ -43,14 +43,14 @@ namespace boost { namespace fusion { }; template<typename It> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_deref(It)>::type operator()(const It& it) const { return fusion::deref(it); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED unused_type operator()(unused_type const&) const { return unused_type(); @@ -72,7 +72,7 @@ namespace boost { namespace fusion { typedef typename result_of::as_vector< typename result_of::transform<typename It::iterators, detail::poly_deref>::type>::type type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(It const& it) { diff --git a/boost/fusion/view/zip_view/detail/distance_impl.hpp b/boost/fusion/view/zip_view/detail/distance_impl.hpp index 8beaccca44..f306e1b4a3 100644 --- a/boost/fusion/view/zip_view/detail/distance_impl.hpp +++ b/boost/fusion/view/zip_view/detail/distance_impl.hpp @@ -70,7 +70,7 @@ namespace boost { namespace fusion { struct apply : detail::zip_view_iterator_distance<It1, It2>::type { - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static typename detail::zip_view_iterator_distance<It1, It2>::type call(It1 const& /*it1*/, It2 const& /*it2*/) { diff --git a/boost/fusion/view/zip_view/detail/end_impl.hpp b/boost/fusion/view/zip_view/detail/end_impl.hpp index d57b08fbd7..28549cb7d9 100644 --- a/boost/fusion/view/zip_view/detail/end_impl.hpp +++ b/boost/fusion/view/zip_view/detail/end_impl.hpp @@ -55,7 +55,7 @@ namespace boost { namespace fusion { }; template<typename Seq> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<endpoints(Seq&)>::type operator()(Seq& seq) const { @@ -63,14 +63,14 @@ namespace boost { namespace fusion { } template<typename Seq> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<endpoints(Seq const&)>::type operator()(Seq const& seq) const { return fusion::advance<M>(fusion::begin(seq)); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED unused_type operator()(unused_type const&) const { return unused_type(); @@ -93,7 +93,7 @@ namespace boost { namespace fusion { typename result_of::transform<typename Sequence::sequences, detail::endpoints<typename Sequence::size> >::type, typename Sequence::category> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Sequence& sequence) { diff --git a/boost/fusion/view/zip_view/detail/next_impl.hpp b/boost/fusion/view/zip_view/detail/next_impl.hpp index e9236b4200..4bcd90a5a5 100644 --- a/boost/fusion/view/zip_view/detail/next_impl.hpp +++ b/boost/fusion/view/zip_view/detail/next_impl.hpp @@ -42,14 +42,14 @@ namespace boost { namespace fusion { }; template<typename It> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_next(It)>::type operator()(const It& it) const { return fusion::next(it); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED unused_type operator()(unused_type const&) const { return unused_type(); @@ -72,7 +72,7 @@ namespace boost { namespace fusion { typename result_of::transform<typename Iterator::iterators, detail::poly_next>::type, typename Iterator::category> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& it) { diff --git a/boost/fusion/view/zip_view/detail/prior_impl.hpp b/boost/fusion/view/zip_view/detail/prior_impl.hpp index aa69229565..655b509237 100644 --- a/boost/fusion/view/zip_view/detail/prior_impl.hpp +++ b/boost/fusion/view/zip_view/detail/prior_impl.hpp @@ -41,14 +41,14 @@ namespace boost { namespace fusion { }; template<typename It> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED typename result<poly_prior(It)>::type operator()(const It& it) const { return fusion::prior(it); } - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED unused_type operator()(unused_type const&) const { return unused_type(); @@ -71,7 +71,7 @@ namespace boost { namespace fusion { typename result_of::transform<typename Iterator::iterators, detail::poly_prior>::type, typename Iterator::category> type; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED static type call(Iterator const& it) diff --git a/boost/fusion/view/zip_view/zip_view.hpp b/boost/fusion/view/zip_view/zip_view.hpp index 4e807f732b..cf6f6d2716 100644 --- a/boost/fusion/view/zip_view/zip_view.hpp +++ b/boost/fusion/view/zip_view/zip_view.hpp @@ -122,7 +122,7 @@ namespace boost { namespace fusion { typedef typename fusion::result_of::as_vector<Sequences>::type sequences; typedef typename detail::min_size<real_sequences>::type size; - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED zip_view( const Sequences& seqs) : sequences_(seqs) diff --git a/boost/fusion/view/zip_view/zip_view_iterator.hpp b/boost/fusion/view/zip_view/zip_view_iterator.hpp index fec50e6f18..cf2d763011 100644 --- a/boost/fusion/view/zip_view/zip_view_iterator.hpp +++ b/boost/fusion/view/zip_view/zip_view_iterator.hpp @@ -35,7 +35,7 @@ namespace boost { namespace fusion { typedef Traversal category; template<typename InitSeq> - BOOST_FUSION_GPU_ENABLED + BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED zip_view_iterator( const InitSeq& iterator_seq) : iterators_(iterator_seq) @@ -46,4 +46,13 @@ namespace boost { namespace fusion { }; }} +#ifdef BOOST_FUSION_WORKAROUND_FOR_LWG_2408 +namespace std +{ + template <typename IteratorSequence, typename Traversal> + struct iterator_traits< ::boost::fusion::zip_view_iterator<IteratorSequence, Traversal> > + { }; +} +#endif + #endif |