此代码在 GCC 和 Clang 中有效,但在 MSVC 上无效:
#include <concepts>
#include <utility>
struct S {};
const S&& f();
S g();
static_assert(std::same_as<decltype(false ? f() : g()), const S>);
https://godbolt.org/z/99rMPzecM
MSVC认为decltype(false ? f() : g())
是const S&&
哪一个是正确的?为什么?