]> git.saurik.com Git - bison.git/blobdiff - data/variant.hh
variants: prohibit simple copies
[bison.git] / data / variant.hh
index 684f9e35bda0a64f9087ae58b074b08b231df78e..454f360ad6be0e598437cbcd3af8d130567da98c 100644 (file)
@@ -79,6 +79,7 @@ m4_map([b4_char_sizeof_], [$@])dnl
 # The needed includes for variants support.
 m4_define([b4_variant_includes],
 [b4_parse_assert_if([[#include <typeinfo>]])[
+#include <cstdlib>  // abort
 #ifndef YYASSERT
 # include <cassert>
 # define YYASSERT assert
@@ -188,6 +189,15 @@ m4_define([b4_variant_define],
       other.destroy<T>();
     }
 
+    /// Copy the content of \a other to this.
+    /// Destroys \a other.
+    template <typename T>
+    inline void
+    copy (const variant<S>& other)
+    {
+      build<T> (other.as<T> ());
+    }
+
     /// Destroy the stored \a T.
     template <typename T>
     inline void
@@ -198,6 +208,13 @@ m4_define([b4_variant_define],
       tname = YY_NULL;])[
     }
 
+    /// Prohibit blind copies.
+    //  private:
+    self_type& operator=(const self_type&)
+    {
+      abort ();
+    }
+
   private:
     /// A buffer large enough to store any of the semantic values.
     /// Long double is chosen as it has the strongest alignment