With a newer version of the g++ compiler (9.2.1), building reports the following warning:
DLMS-COSEM/src/Linux/../../lib/DLMS-COSEM/include/mapbox/variant.hpp:222:13: warning: ‘new’ of initializer_list does not extend the lifetime of the underlying array [-Winit-list-lifetime]
222 | new (new_value) T(std::move(reinterpret_cast<T>(old_value)));
Unwinding this a bit, it's actually true because the macro definitions of ASN_INTEGER_LIST_TYPE and ASN_FIXED_INTEGER_LIST_TYPE (in ASNType.h) both make reference to std::initializer_list<uint32_t>. The problem is that a std::initializer_list is a temporary type as of C++14 and so its lifetime is not guaranteed to be extended by new in the variant.hpp code.
The solution is likely to be replacing with std::vector<uint32_t> or some other concrete type, but this is not trivial due to the definition of DLMSVariant and friends.
With a newer version of the g++ compiler (9.2.1), building reports the following warning:
Unwinding this a bit, it's actually true because the macro definitions of
ASN_INTEGER_LIST_TYPE
andASN_FIXED_INTEGER_LIST_TYPE
(inASNType.h
) both make reference tostd::initializer_list<uint32_t>
. The problem is that astd::initializer_list
is a temporary type as of C++14 and so its lifetime is not guaranteed to be extended bynew
in thevariant.hpp
code.The solution is likely to be replacing with
std::vector<uint32_t>
or some other concrete type, but this is not trivial due to the definition ofDLMSVariant
and friends.