mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
variants: assert changes
* data/variant.hh (swap): More asserts can't hurt. Don't perform useless swaps. (build): Deactivate problematic asserts, pending further investigation. (variant): Prohibit copy construction.
This commit is contained in:
@@ -106,8 +106,8 @@ m4_define([b4_variant_define],
|
||||
inline T&
|
||||
build ()
|
||||
{]b4_parse_assert_if([
|
||||
YYASSERT (!built);
|
||||
YYASSERT (!tname);
|
||||
//YYASSERT (!built);
|
||||
//YYASSERT (!tname);
|
||||
YYASSERT (sizeof (T) <= S);
|
||||
built = true;
|
||||
tname = typeid (T).name ();])[
|
||||
@@ -119,8 +119,8 @@ m4_define([b4_variant_define],
|
||||
inline T&
|
||||
build (const T& t)
|
||||
{]b4_parse_assert_if([
|
||||
YYASSERT (!built);
|
||||
YYASSERT (!tname);
|
||||
//YYASSERT (!built);
|
||||
//YYASSERT (!tname);
|
||||
YYASSERT (sizeof (T) <= S);
|
||||
built = true;
|
||||
tname = typeid (T).name ();])[
|
||||
@@ -161,14 +161,15 @@ m4_define([b4_variant_define],
|
||||
}
|
||||
|
||||
/// Swap the content with \a other, of same type.
|
||||
/// Both variants must be built beforehand.
|
||||
template <typename T>
|
||||
inline void
|
||||
swap (variant<S>& other)
|
||||
{]b4_parse_assert_if([
|
||||
YYASSERT (built);
|
||||
YYASSERT (other.built);
|
||||
YYASSERT (tname == other.tname);])[
|
||||
std::swap (as<T>(), other.as<T>());]b4_parse_assert_if([
|
||||
std::swap (built, other.built);
|
||||
std::swap (tname, other.tname);])[
|
||||
std::swap (as<T>(), other.as<T>());
|
||||
}
|
||||
|
||||
/// Assign the content of \a other to this.
|
||||
@@ -208,6 +209,11 @@ m4_define([b4_variant_define],
|
||||
abort ();
|
||||
}
|
||||
|
||||
variant (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
|
||||
|
||||
Reference in New Issue
Block a user