
On Apr 21, 2007, at 8:57 AM, Larry Evans wrote:
So, to summarize, what you want is:
proto::and_<> == proto::_ proto::or_<> == proto::not_<_>
where == means, "matches the same expressions". IOW, _ and not_<_> would be the "ones" of the and_ and or_ operators since:
proto::and_<proto::and_<X0,X1,...,Xn>, proto::_ > == proto::and_<X0,X1,...,Xn>
and likewise for or_ and proto::not_<_>. The zeros would be just the reverse. IOW,
zero one ____ ___ and_: not_<_> _ or_ : _ not_<_>
This would seem (to me) to be the logical extension, but I leave to people who have design/used the mpl longer than me to decide whether it is a good idea. I'm not sure I understand zeros and ones: the value which is interesting is the identity. In the case of additions (and ORs) the identity is a 'zero'. In the case of multiplications (and ANDs) the identity is a 'one'. The 'other' value (zero for multiplications and one for additions) seems to only be of interest for simplifying expressions, rather than being logically important, but I might miss something here. Best regards, Maurizio