From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2005-03-02 19:03:45
Paul Mensonides wrote:
>>[mailto:boost-bounces_at_[hidden]] On Behalf Of Tobias Schwinger
>>Sent: Wednesday, March 02, 2005 9:21 AM
>>Subject: [boost] Empty sequence elements
>>Paul Mensonides wrote:
>>>> BOOST_PP_IF(HAS_COLOR(t), and color is COLOR(t) , );
>>> ^^^ This is
>>>undefined behavior in C++. Should be:
>>May a PP-Sequence have '()'-elements ?
> Not until C++ gets placemarkers (i.e. empty arguments) from C99. Without them,
> "emptiness" is not an element. '()' is just nullary parentheses. Without
> variadics, a mechanism can only handle sequences in which each element is a
> specific arity. In the pp-lib, they must be unary (i.e. not nullary). It is
> certainly possible (in current C++) to define primitives for (e.g.) a binary
> sequence, but I'd have to replicate the entire mechanism. Even if binary
> sequence primitives where there, you still couldn't have (,) or (a,) or (,b)
> because each "element" would be a comma-separated pair of elements, and
> emptiness is not an element.
>>The documentation says that "a sequence cannot be empty"
>>which seems to be something different than containing empty
> Yes, when the documentation says the above it means there is no such thing as a
> nil sequence. E.g.
> (a)(b)(c) // 3-element, unary sequence
> (a)(b) // 2-element, unary sequence
> (a) // 1-element, unary sequence
> // 0-element sequence, n-ary sequence
> The 0-element sequence has a representation (emptiness), but that representation
> is not yet valid C++. In other words, the reason that you can't have empty
> sequences and can't have empty elements is the same reason. This applies
> generally: you can't have empty arguments, you can't have empty tuple elements,
> you can't have empty list elements, etc.. With placemarkers, that will change,
> because placemarkers are a well-defined way of saying that an entity can be
> nothing. Until that happens, it is undefined behavior. :(
Thank you for this very detailed reply !
Is it safe to use BOOST_PP_EMTPY or BOOST_PP_INDENTITY(somthing) as the
element and "dereference" with '()' ?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk