Mengapa `decltype (static_cast <T> (...))` tidak selalu `T`?
Untuk kode berikut, semua kecuali pernyataan terakhir berlalu: 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 } Mengapa pernyataan terakhir ini gagal, dan static_cast<T>tidak selalu mengembalikan …