[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 7/7] c++: privatize variant blind copies
From: |
Theophile Ranquet |
Subject: |
[PATCH 7/7] c++: privatize variant blind copies |
Date: |
Fri, 11 Jan 2013 13:28:15 +0100 |
* data/variant.hh (variant, operator=): Make private.
* data/c++.m4 (operator=): New, to avoid needing a definition of that operator
for each class member (such as a possible variant).
* data/glr.cc, data/lalr.cc: Add the necessary include for the abort.
---
data/c++.m4 | 11 +++++++++++
data/glr.cc | 1 +
data/lalr1.cc | 1 +
data/variant.hh | 2 +-
4 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/data/c++.m4 b/data/c++.m4
index 020160c..4fb2805 100644
--- a/data/c++.m4
+++ b/data/c++.m4
@@ -186,6 +186,9 @@ m4_define([b4_public_types_declare],
[const semantic_type& v],
b4_locations_if([const location_type& l]))[);
+ /// Assignment operator.
+ inline basic_symbol& operator= (const basic_symbol& other);
+
/// Destructive move, \a s is emptied.
inline void move (basic_symbol& s);
@@ -252,6 +255,14 @@ m4_define([b4_public_types_define],
template <typename Base>
inline
+ ]b4_parser_class_name[::basic_symbol<Base>&
+ ]b4_parser_class_name[::basic_symbol<Base>::operator= (const basic_symbol&
other)
+ {
+ abort ();
+ }
+
+ template <typename Base>
+ inline
]b4_parser_class_name[::basic_symbol<Base>::basic_symbol (const
basic_symbol& other)
: Base (other)
, value ()]b4_locations_if([
diff --git a/data/glr.cc b/data/glr.cc
index 5d8e481..7c03606 100644
--- a/data/glr.cc
+++ b/data/glr.cc
@@ -263,6 +263,7 @@ m4_define([b4_shared_declarations],
[m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
b4_percent_code_get([[requires]])[
+#include <cstdlib> // abort
#include <stdexcept>
#include <string>
#include <iostream>]b4_defines_if([
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 40446b7..178b8fa 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -146,6 +146,7 @@ b4_variant_if([m4_include(b4_pkgdatadir/[variant.hh])])
m4_define([b4_shared_declarations],
[b4_percent_code_get([[requires]])[
]b4_parse_assert_if([# include <cassert>])[
+# include <cstdlib> // abort
# include <vector>
# include <iostream>
# include <stdexcept>
diff --git a/data/variant.hh b/data/variant.hh
index 184485c..4317aba 100644
--- a/data/variant.hh
+++ b/data/variant.hh
@@ -203,7 +203,7 @@ m4_define([b4_variant_define],
}
/// Prohibit blind copies.
- // private:
+ private:
self_type& operator=(const self_type&)
{
abort ();
--
1.8.1
- Re: [PATCH 5/7] glr.c: style changes, (continued)
[PATCH 2/7] glr.cc: fatal if using api.token.ctor without variants, Theophile Ranquet, 2013/01/11
[PATCH 7/7] c++: privatize variant blind copies,
Theophile Ranquet <=