¿Por qué `decltype (static_cast <T> (...))` no siempre es `T`?
Para el siguiente código, todos, excepto la última aserción, pasan: 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 } ¿Por qué esta última afirmación falla y …