> On 30 Nov 2018, at 00:40, Frank Heckenbach <f.heckenb...@fh-soft.de> wrote: > > Hans Åberg wrote: > >>> Sure, though for my taste "unsafe" sounds a bit harsh, perhaps >>> "unchecked"? If you put in the next release, I'll change my code to >>> use it. >> >> It seems pretty standard to have lookup tokens with different >> syntactic behavior, for example when they are declared of >> different type in a language. So it is worrisome that the typed >> parser deems the use unsafe. > > What is potentially unsafe is that the actual type may not match the > declared type in the grammar. With std::variant, a mismatch would > cause an exception to be thrown. With Bison's static variant, a > mismatch might lead to UB. > > So perhaps this function could actually do a type check (which > probably requires another auto-generated switch) and also throw or > (if this is not desired) call std::terminate or so on mismatch, > Akim?
The C++17 std::variant stores the type as an index. So perhaps there should be and additional table storing the type, with a symbol constructor that constructs the right value from the token.