I am working with a code that does something like that:
#include <cstdint>
#include <iostream>
static constexpr int TOOL_COUNT = 3;
struct Parameters {
std::uint16_t version;
std::uint16_t delay;
std::uint16_t minimumTemperatures[TOOL_COUNT];
std::uint16_t maximumTemperatures[TOOL_COUNT];
};
void useAsPointerToUint16(const std::uint16_t* data, const std::size_t size) {
std::cout << size << std::endl;
for (unsigned int i = 0; i < size; ++i) {
std::cout << *data;
++data;
}
std::cout << std::endl;
}
int main() {
Parameters parameters{1, 2, {3, 4, 5}, {6, 7, 8}};
useAsPointerToUint16(reinterpret_cast<std::uint16_t*>(¶meters), sizeof(parameters) / sizeof(std::uint16_t));
}
For me the dereferencing in useAsPointerToUint16 is undefined behavior.
Am I right?