]> git.saurik.com Git - bison.git/blobdiff - data/variant.hh
variants: avoid type punning issue
[bison.git] / data / variant.hh
index 047e641ba7ae37d96d848f152d598d81d9b4be6d..e2a537ad3d694d7e0f19bda3f63c48e2596b9067 100644 (file)
@@ -142,7 +142,10 @@ m4_define([b4_variant_define],
     {]b4_parse_assert_if([
       YYASSERT (tname == typeid (T).name ());
       YYASSERT (sizeof (T) <= S);])[
-      return reinterpret_cast<T&> (buffer.raw);
+      {
+        void *dummy = buffer.raw;
+        return *static_cast<T*> (dummy);
+      }
     }
 
     /// Const accessor to a built \a T (for %printer).
@@ -152,7 +155,10 @@ m4_define([b4_variant_define],
     {]b4_parse_assert_if([
       YYASSERT (tname == typeid (T).name ());
       YYASSERT (sizeof (T) <= S);])[
-      return reinterpret_cast<const T&> (buffer.raw);
+      {
+        const void *dummy = buffer.raw;
+        return *static_cast<const T*> (dummy);
+      }
     }
 
     /// Swap the content with \a other, of same type.