* data/variant.hh (swap): Doc.
(build): Rename as...
(move): This, more coherent naming with clearer meaning.
* data/c++.m4 (move): Adjust.
{
this->type = s.type_get ();]b4_locations_if([
location = s.location;])[
- ]b4_variant_if([b4_symbol_variant([s.type_get ()], [value], [build],
+ ]b4_variant_if([b4_symbol_variant([s.type_get ()], [value], [move],
[s.value])],
[value = s.value;])[
}
}
/// Swap the content with \a other, of same type.
- /// Both variants must be built beforehand.
+ /// Both variants must be built beforehand, because swapping the actual
+ /// data requires reading it (with as()), and this is not possible on
+ /// unconstructed variants: it would require some dynamic testing, which
+ /// should not be the variant's responsability.
+ /// Swapping between built and ((possibly) non-built is done with
+ /// variant::move ().
template <typename T>
inline void
swap (variant<S>& other)
/// Destroys \a other.
template <typename T>
inline void
- build (variant<S>& other)
- {
+ move (variant<S>& other)
+ {]b4_parse_assert_if([
+ YYASSERT (! built);])[
build<T>();
swap<T>(other);
other.destroy<T>();