epri-dev / DLMS-COSEM

EPRI implementation of the DLMS-COSEM meter data protocol
BSD 3-Clause "New" or "Revised" License
25 stars 15 forks source link

migrate from std::initializer_list to std::vector #4

Closed beroset closed 5 years ago

beroset commented 5 years ago

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.

beroset commented 5 years ago

All tests pass with the pushed changes.