diff --git a/include/boost/serialization/extended_type_info_no_rtti.hpp b/include/boost/serialization/extended_type_info_no_rtti.hpp index 9e56974a1..4d915f605 100644 --- a/include/boost/serialization/extended_type_info_no_rtti.hpp +++ b/include/boost/serialization/extended_type_info_no_rtti.hpp @@ -129,23 +129,26 @@ class extended_type_info_no_rtti : } void * construct(unsigned int count, ...) const BOOST_OVERRIDE { // count up the arguments + void * r = NULL; std::va_list ap; + va_start(ap, count); switch(count){ case 0: - return factory::type, 0>(ap); + r = factory::type, 0>(ap); case 1: - return factory::type, 1>(ap); + r = factory::type, 1>(ap); case 2: - return factory::type, 2>(ap); + r = factory::type, 2>(ap); case 3: - return factory::type, 3>(ap); + r = factory::type, 3>(ap); case 4: - return factory::type, 4>(ap); + r = factory::type, 4>(ap); default: BOOST_ASSERT(false); // too many arguments // throw exception here? - return NULL; } + va_end(ap); + return r; } void destroy(void const * const p) const BOOST_OVERRIDE { boost::serialization::access::destroy( diff --git a/include/boost/serialization/extended_type_info_typeid.hpp b/include/boost/serialization/extended_type_info_typeid.hpp index 65285644c..82382fbd3 100644 --- a/include/boost/serialization/extended_type_info_typeid.hpp +++ b/include/boost/serialization/extended_type_info_typeid.hpp @@ -112,23 +112,26 @@ class extended_type_info_typeid : } void * construct(unsigned int count, ...) const BOOST_OVERRIDE { // count up the arguments + void * r = NULL; std::va_list ap; + va_start(ap, count); switch(count){ case 0: - return factory::type, 0>(ap); + r = factory::type, 0>(ap); case 1: - return factory::type, 1>(ap); + r = factory::type, 1>(ap); case 2: - return factory::type, 2>(ap); + r = factory::type, 2>(ap); case 3: - return factory::type, 3>(ap); + r = factory::type, 3>(ap); case 4: - return factory::type, 4>(ap); + r = factory::type, 4>(ap); default: BOOST_ASSERT(false); // too many arguments // throw exception here? - return NULL; } + va_end(ap); + return r; } void destroy(void const * const p) const BOOST_OVERRIDE { boost::serialization::access::destroy(