Рассмотрим следующий код:
#include <cstdint>
#include <algorithm>
std::uintptr_t minPointer(void *first, void *second) {
const auto pair = std::minmax(
reinterpret_cast<std::uintptr_t>(first),
reinterpret_cast<std::uintptr_t>(second)
);
return pair.first;
}
и сборку, сгенерированную GCC8 с -O3 на https://godbolt.org/z/qWJuV_ для minPointer
:
minPointer(void*, void*):
mov rax, QWORD PTR [rsp-8]
ret
который явно не делает то, что предназначен создателем кода. Является ли этот код причиной UB или это ошибка GCC (8)?