From 92d2eb957407c16d1eca3598e00e6c16cbe4e7e7 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Thu, 10 Jun 2010 16:32:24 -0400 Subject: Use ptr_deque for value_t::sequence_t This is to work around undefined behavior according to the Standard, [lib.res.on.functions]/2: "In particular, the effects are undefined in the following cases: [..] - if an incomplete type (3.9) is used as a template argument when instantiating a template component." --- src/value.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/value.cc') diff --git a/src/value.cc b/src/value.cc index 33461c5a..74dd843d 100644 --- a/src/value.cc +++ b/src/value.cc @@ -343,7 +343,7 @@ value_t& value_t::operator+=(const value_t& val) throw_(value_error, _("Cannot add sequences of different lengths")); } } else { - as_sequence_lval().push_back(val); + as_sequence_lval().push_back(new value_t(val)); } return *this; } @@ -1110,7 +1110,7 @@ void value_t::in_place_cast(type_t cast_type) else if (cast_type == SEQUENCE) { sequence_t temp; if (! is_null()) - temp.push_back(*this); + temp.push_back(new value_t(*this)); set_sequence(temp); return; } @@ -1693,7 +1693,7 @@ value_t value_t::strip_annotations(const keep_details_t& what_to_keep) const case SEQUENCE: { sequence_t temp; foreach (const value_t& value, as_sequence()) - temp.push_back(value.strip_annotations(what_to_keep)); + temp.push_back(new value_t(value.strip_annotations(what_to_keep))); return temp; } -- cgit v1.2.3