为什么`decltype(static_cast (…))`并不总是`T`?

问题描述 投票:2回答:1

对于以下代码,第一个断言通过但第二个断言失败

template<typename T>
constexpr void assert_static_cast_identity() {
    using T_cast = decltype(static_cast<T>(std::declval<T>()));
    static_assert(std::is_same_v<T_cast, T>);
}

int main() {
    assert_static_cast_identity<int>();
    assert_static_cast_identity<int&>();
    assert_static_cast_identity<int&&>();
    // assert_static_cast_identity<int(int)>(); // illegal cast
    assert_static_cast_identity<int (&)(int)>();
    assert_static_cast_identity<int (&&)(int)>(); // static assert fails
}

为什么最后一个断言失败,并且static_cast<T>并不总是返回T

c++ static-cast
1个回答
3
投票
这在static_cast的定义中硬编码:
© www.soinside.com 2019 - 2024. All rights reserved.