考虑以下代码:
#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;
}
针对minPointer
,使用GCC8的-O3生成的汇编代码如下:
minPointer(void*, void*):
mov rax, QWORD PTR [rsp-8]
ret
这段代码明显没有实现代码创建者预期的功能。这段代码是否会导致未定义行为或者是GCC(8)的一个错误?
minmax
的cppreference说明 - 稍微往下拉一点 - “对于重载版本(1,2),如果其中一个参数是右值,则所返回的引用在包含该调用的完整表达式结束后变成悬空引用”。 - underscore_d