Workaround for ObjC (mis)use of nil (from Mathias Gaunard)

[SVN r81628]
This commit is contained in:
Joel de Guzman
2012-11-30 02:31:23 +00:00
parent 8d6200ef58
commit 6d265316ed
29 changed files with 64 additions and 61 deletions

View File

@ -11,11 +11,11 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
namespace result_of namespace result_of
{ {
template <typename Car, typename Cdr = nil> template <typename Car, typename Cdr = nil_>
struct cons_tie struct cons_tie
{ {
typedef cons<Car&, Cdr> type; typedef cons<Car&, Cdr> type;

View File

@ -13,11 +13,11 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
namespace result_of namespace result_of
{ {
template <typename Car, typename Cdr = nil> template <typename Car, typename Cdr = nil_>
struct make_cons struct make_cons
{ {
typedef cons<typename detail::as_fusion_element<Car>::type, Cdr> type; typedef cons<typename detail::as_fusion_element<Car>::type, Cdr> type;

View File

@ -34,7 +34,7 @@ namespace boost { namespace fusion
struct forward_traversal_tag; struct forward_traversal_tag;
struct fusion_sequence_tag; struct fusion_sequence_tag;
struct nil : sequence_base<nil> struct nil_ : sequence_base<nil_>
{ {
typedef mpl::int_<0> size; typedef mpl::int_<0> size;
typedef cons_tag fusion_tag; typedef cons_tag fusion_tag;
@ -44,10 +44,10 @@ namespace boost { namespace fusion
typedef void_ car_type; typedef void_ car_type;
typedef void_ cdr_type; typedef void_ cdr_type;
nil() {} nil_() {}
template <typename Iterator> template <typename Iterator>
nil(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/) nil_(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/)
{} {}
template <typename Iterator> template <typename Iterator>
@ -56,7 +56,7 @@ namespace boost { namespace fusion
} }
}; };
template <typename Car, typename Cdr /*= nil*/> template <typename Car, typename Cdr /*= nil_*/>
struct cons : sequence_base<cons<Car, Cdr> > struct cons : sequence_base<cons<Car, Cdr> >
{ {
typedef mpl::int_<Cdr::size::value+1> size; typedef mpl::int_<Cdr::size::value+1> size;

View File

@ -2,7 +2,7 @@
Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005 Eric Niebler Copyright (c) 2005 Eric Niebler
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#if !defined(BOOST_FUSION_CONS_FWD_HPP_INCLUDED) #if !defined(BOOST_FUSION_CONS_FWD_HPP_INCLUDED)
@ -10,9 +10,12 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
#ifndef nil
typedef nil_ nil;
#endif
template <typename Car, typename Cdr = nil> template <typename Car, typename Cdr = nil_>
struct cons; struct cons;
}} }}

View File

@ -18,14 +18,14 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct cons_iterator_tag; struct cons_iterator_tag;
struct forward_traversal_tag; struct forward_traversal_tag;
template <typename Cons> template <typename Cons>
struct cons_iterator_identity; struct cons_iterator_identity;
template <typename Cons = nil> template <typename Cons = nil_>
struct cons_iterator : iterator_base<cons_iterator<Cons> > struct cons_iterator : iterator_base<cons_iterator<Cons> >
{ {
typedef cons_iterator_tag fusion_tag; typedef cons_iterator_tag fusion_tag;
@ -49,40 +49,40 @@ namespace boost { namespace fusion
{ {
typedef forward_traversal_tag category; typedef forward_traversal_tag category;
typedef cons_iterator_tag fusion_tag; typedef cons_iterator_tag fusion_tag;
typedef nil cons_type; typedef nil_ cons_type;
typedef cons_iterator_identity< typedef cons_iterator_identity<
add_const<nil>::type> add_const<nil_>::type>
identity; identity;
nil_iterator() {} nil_iterator() {}
explicit nil_iterator(nil const&) {} explicit nil_iterator(nil_ const&) {}
}; };
template <> template <>
struct cons_iterator<nil> : nil_iterator struct cons_iterator<nil_> : nil_iterator
{ {
cons_iterator() {} cons_iterator() {}
explicit cons_iterator(nil const&) {} explicit cons_iterator(nil_ const&) {}
}; };
template <> template <>
struct cons_iterator<nil const> : nil_iterator struct cons_iterator<nil_ const> : nil_iterator
{ {
cons_iterator() {} cons_iterator() {}
explicit cons_iterator(nil const&) {} explicit cons_iterator(nil_ const&) {}
}; };
template <> template <>
struct cons_iterator<list<> > : nil_iterator struct cons_iterator<list<> > : nil_iterator
{ {
cons_iterator() {} cons_iterator() {}
explicit cons_iterator(nil const&) {} explicit cons_iterator(nil_ const&) {}
}; };
template <> template <>
struct cons_iterator<list<> const> : nil_iterator struct cons_iterator<list<> const> : nil_iterator
{ {
cons_iterator() {} cons_iterator() {}
explicit cons_iterator(nil const&) {} explicit cons_iterator(nil_ const&) {}
}; };
}} }}

View File

@ -13,7 +13,7 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct cons_tag; struct cons_tag;

View File

@ -24,12 +24,12 @@ namespace boost { namespace fusion { namespace detail
template <typename First, typename Last> template <typename First, typename Last>
struct build_cons<First, Last, true> struct build_cons<First, Last, true>
{ {
typedef nil type; typedef nil_ type;
static nil static nil_
call(First const&, Last const&) call(First const&, Last const&)
{ {
return nil(); return nil_();
} }
}; };

View File

@ -13,7 +13,7 @@ namespace boost { namespace fusion
{ {
struct cons_tag; struct cons_tag;
struct nil; struct nil_;
template <typename Car, typename Cdr> template <typename Car, typename Cdr>
struct cons; struct cons;
@ -28,7 +28,7 @@ namespace boost { namespace fusion
{ {
template <typename Sequence> template <typename Sequence>
struct apply struct apply
: boost::is_convertible<Sequence, nil> : boost::is_convertible<Sequence, nil_>
{}; {};
}; };
} }

View File

@ -13,7 +13,7 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct cons_tag; struct cons_tag;
@ -35,7 +35,7 @@ namespace boost { namespace fusion
struct apply struct apply
{ {
typedef cons_iterator< typedef cons_iterator<
typename mpl::if_<is_const<Sequence>, nil const, nil>::type> typename mpl::if_<is_const<Sequence>, nil_ const, nil_>::type>
type; type;
static type static type

View File

@ -18,7 +18,7 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct void_; struct void_;
}} }}
@ -61,7 +61,7 @@ namespace boost { namespace fusion { namespace detail
template <> template <>
struct list_to_cons<BOOST_PP_ENUM(FUSION_MAX_LIST_SIZE, FUSION_VOID, _)> struct list_to_cons<BOOST_PP_ENUM(FUSION_MAX_LIST_SIZE, FUSION_VOID, _)>
{ {
typedef nil type; typedef nil_ type;
}; };
}}} }}}

View File

@ -8,7 +8,7 @@
==============================================================================*/ ==============================================================================*/
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct void_; struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9> template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
struct list struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/ ==============================================================================*/
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct void_; struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19> template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
struct list struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/ ==============================================================================*/
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct void_; struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29> template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
struct list struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/ ==============================================================================*/
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct void_; struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39> template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
struct list struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/ ==============================================================================*/
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct void_; struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49> template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
struct list struct list

View File

@ -81,6 +81,6 @@ namespace boost { namespace fusion { namespace detail
template <> template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{ {
typedef nil type; typedef nil_ type;
}; };
}}} }}}

View File

@ -141,6 +141,6 @@ namespace boost { namespace fusion { namespace detail
template <> template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{ {
typedef nil type; typedef nil_ type;
}; };
}}} }}}

View File

@ -201,6 +201,6 @@ namespace boost { namespace fusion { namespace detail
template <> template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{ {
typedef nil type; typedef nil_ type;
}; };
}}} }}}

View File

@ -261,6 +261,6 @@ namespace boost { namespace fusion { namespace detail
template <> template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{ {
typedef nil type; typedef nil_ type;
}; };
}}} }}}

View File

@ -321,6 +321,6 @@ namespace boost { namespace fusion { namespace detail
template <> template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{ {
typedef nil type; typedef nil_ type;
}; };
}}} }}}

View File

@ -12,7 +12,7 @@
namespace boost { namespace fusion { namespace detail namespace boost { namespace fusion { namespace detail
{ {
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
template<typename Cons, typename State = nil> template<typename Cons, typename State = nil_>
struct reverse_cons; struct reverse_cons;
template<typename Car, typename Cdr, typename State> template<typename Car, typename Cdr, typename State>
@ -29,11 +29,11 @@ namespace boost { namespace fusion { namespace detail
}; };
template<typename State> template<typename State>
struct reverse_cons<nil, State> struct reverse_cons<nil_, State>
{ {
typedef State type; typedef State type;
static State const &call(nil const &, State const &state = State()) static State const &call(nil_ const &, State const &state = State())
{ {
return state; return state;
} }

View File

@ -32,7 +32,7 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
struct void_; struct void_;
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, typename T)> template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_LIST_SIZE, typename T)>

View File

@ -13,7 +13,7 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
namespace detail namespace detail
{ {
@ -32,7 +32,7 @@ namespace boost { namespace fusion
{}; {};
template <> template <>
struct segmented_equal_to<fusion::nil, fusion::nil> struct segmented_equal_to<fusion::nil_, fusion::nil_>
: mpl::true_ : mpl::true_
{}; {};
} }

View File

@ -19,7 +19,7 @@
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
struct nil; struct nil_;
namespace detail namespace detail
{ {

View File

@ -83,7 +83,7 @@ namespace boost { namespace fusion
//auto segmented_next_impl_recurse3(stack) //auto segmented_next_impl_recurse3(stack)
//{ //{
// if (size(stack) == 1) // if (size(stack) == 1)
// return cons(iterator_range(end(car(stack)), end(car(stack))), nil); // return cons(iterator_range(end(car(stack)), end(car(stack))), nil_);
// else // else
// return segmented_next_impl_recurse(stack.cdr); // return segmented_next_impl_recurse(stack.cdr);
//} //}

View File

@ -19,10 +19,10 @@ namespace boost { namespace fusion { namespace detail
{ {
//auto segmented_begin( seq ) //auto segmented_begin( seq )
//{ //{
// return make_segmented_iterator( segmented_begin_impl( seq, nil ) ); // return make_segmented_iterator( segmented_begin_impl( seq, nil_ ) );
//} //}
template <typename Sequence, typename Nil = fusion::nil> template <typename Sequence, typename Nil = fusion::nil_>
struct segmented_begin struct segmented_begin
{ {
typedef typedef

View File

@ -18,7 +18,7 @@ namespace boost { namespace fusion { namespace detail
// return make_segmented_iterator( segmented_end_impl( seq ) ); // return make_segmented_iterator( segmented_end_impl( seq ) );
//} //}
template <typename Sequence, typename Nil = fusion::nil> template <typename Sequence, typename Nil = fusion::nil_>
struct segmented_end struct segmented_end
{ {
typedef typedef

View File

@ -20,7 +20,7 @@ namespace boost { namespace fusion
{ {
//auto segmented_fold_until(seq, state, fun) //auto segmented_fold_until(seq, state, fun)
//{ //{
// return first(segmented_fold_until_impl(seq, state, nil, fun)); // return first(segmented_fold_until_impl(seq, state, nil_, fun));
//} //}
namespace result_of namespace result_of
@ -32,7 +32,7 @@ namespace boost { namespace fusion
detail::segmented_fold_until_impl< detail::segmented_fold_until_impl<
Sequence Sequence
, State , State
, fusion::nil , fusion::nil_
, Fun , Fun
> >
filter; filter;
@ -55,7 +55,7 @@ namespace boost { namespace fusion
typename result_of::segmented_fold_until<Sequence, State, Fun>::filter typename result_of::segmented_fold_until<Sequence, State, Fun>::filter
filter; filter;
return filter::call(seq, state, fusion::nil(), fun); return filter::call(seq, state, fusion::nil_(), fun);
} }
template <typename Sequence, typename State, typename Fun> template <typename Sequence, typename State, typename Fun>
@ -66,7 +66,7 @@ namespace boost { namespace fusion
typename result_of::segmented_fold_until<Sequence const, State, Fun>::filter typename result_of::segmented_fold_until<Sequence const, State, Fun>::filter
filter; filter;
return filter::call(seq, state, fusion::nil(), fun); return filter::call(seq, state, fusion::nil_(), fun);
} }
}} }}

View File

@ -70,7 +70,7 @@ namespace boost { namespace fusion { namespace detail
// switch (size(stack_begin)) // switch (size(stack_begin))
// { // {
// case 1: // case 1:
// return nil; // return nil_;
// case 2: // case 2:
// // car(cdr(stack_begin)) is a range over values. // // car(cdr(stack_begin)) is a range over values.
// assert(end(front(car(stack_begin))) == end(car(cdr(stack_begin)))); // assert(end(front(car(stack_begin))) == end(car(cdr(stack_begin))));
@ -205,7 +205,7 @@ namespace boost { namespace fusion { namespace detail
template <typename Stack> template <typename Stack>
struct make_segment_sequence_front<Stack, 1> struct make_segment_sequence_front<Stack, 1>
{ {
typedef typename Stack::cdr_type type; // nil typedef typename Stack::cdr_type type; // nil_
static type call(Stack const &stack) static type call(Stack const &stack)
{ {
@ -218,7 +218,7 @@ namespace boost { namespace fusion { namespace detail
// switch (size(stack_end)) // switch (size(stack_end))
// { // {
// case 1: // case 1:
// return nil; // return nil_;
// case 2: // case 2:
// // car(cdr(stack_back)) is a range over values. // // car(cdr(stack_back)) is a range over values.
// assert(end(front(car(stack_end))) == end(car(cdr(stack_end)))); // assert(end(front(car(stack_end))) == end(car(cdr(stack_end))));
@ -348,7 +348,7 @@ namespace boost { namespace fusion { namespace detail
template <typename Stack> template <typename Stack>
struct make_segment_sequence_back<Stack, 1> struct make_segment_sequence_back<Stack, 1>
{ {
typedef typename Stack::cdr_type type; // nil typedef typename Stack::cdr_type type; // nil_
static type call(Stack const& stack) static type call(Stack const& stack)
{ {