On Monday, 5 November 2012 at 14:13:41 UTC, evansl wrote:
On 11/05/12 00:33, Robert Jacques wrote:
On Sunday, 4 November 2012 at 22:33:46 UTC, Alex Rønne
Petersen
wrote:
On 05-11-2012 00:31, evansl wrote:
[snip]
If std.Algebraic is like Boost.Variant, then duplicate
bounded types are not allowed and leads to the problem mentioned
in the post on the spirit mailing list which I linked to in my
OP. OOPS, now I see why reading that post was not clear
enough.
Maybe this earlier post in same spirit thread would be clearer.
http://article.gmane.org/gmane.comp.parsers.spirit.general/17113
In particular, note the phrase:
neither can you use variant<string,string,int>
because variant can't take duplicate types.
This can lead to problems in the spirit parser because
the attributes of parsing:
a | b
where:
phrase a has an attribute of type A
phrase b has an attribute of type B
is:
variant<A,B>
as noted near the bottom of:
http://www.boost.org/doc/libs/1_51_0/libs/spirit/doc/html/spirit/abstracts/attributes/compound_attributes.html
and if A and B are the same, then there's a problem because
Boost.variant can't handle duplicates.
Hope that's clearer.
-regards,
Larry
Thank you for the clarification. Implementing an id seems
reasonable feature request for algebraic. I've added a bugzilla
request for it:
http://d.puremagic.com/issues/show_bug.cgi?id=8962 Please have a
look in case I missed anything.
BTW, recently there was a review of
another Boost library that has some similarity to
Boost.any. It's called type_erasure:
http://steven_watanabe.users.sourceforge.net/type_erasure/libs/type_erasure/doc/html/index.html
Since std.Variant is similar to Boost.any (as noted above),
and since Boost.any is, in some ways, like Boost.type_erasure,
and since you're working on a revised std.Variant,
you might be interested in looking at type_erasure.
Thanks, I'll take a look at it.