On Tue, May 26, 2009 at 10:57:01PM +0200, Hans Aberg wrote: || On 26 May 2009, at 22:38, Luca wrote: || || >> Checking what the compiler accepts is a good way to produce non- || >> standard source code || > using a pointer inside a union is a good way to produce non-standard || > source code?!? || || So what does the C++ standard say about it?
"In a union, at most one of the data members can be active at any time, that is, the value of at most one of the data members can be stored in a union at any time. [...] Each data member is allocated as if it were the sole member of a struct." And for those interested in the problem with the bison union: "An object of a class with a non-trivial constructor (12.1), a non-trivial copy construtor (12.8), a non-trivial destructor (12.4), or a non-trivial copy assignment operator (13.5.3, 12.8) cannot be a member of a union, nor can an array of such objects." The rationale being that when default-constructing, copy-constructing, destroying, or assigning the union, the program doesn't have to know which member to use, because under these rules it can just operate on the data. In short, I see no problem with this union at all as bison uses it, semantics-wise, but it is unfortunate that you cannot put your own classes in there in general. || >> But in the end, I think the OP problem might be due to an older || >> version of Bison or an instantiation problem - lack of declaration || >> or a problem with the compiler. || > Simply some #include is missing... || || Did you see the post by Vincent? And I noticed that std::string appears to be used as well, which needs a #include <string>. :) Ciao. Vincent. -- WCC - Smart Search & Match NL +31 30 7503222 vzwe...@wcc-group.com www.wcc-group.com
signature.asc
Description: Digital signature
_______________________________________________ help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison