namespace mystd {template <typename T>struct decay { private: typedef typename std::remove_reference<T>::type U; public: typedef typename std::conditional< std::is_array<U>::value, typename std::remove_extent<U>::type *, typename std::conditional< std::is_function<U>::value, typename std::add_pointer<U>::type, typename std::remove_cv<U>::type>::type>::type type;};template <typename T>using decay_t = typename decay<T>::type;} // namespace mystd// test int main(int argc, char **argv) { mystd::decay_t<int> a = 1000; std::cout << std::is_same<int, mystd::decay_t<int>>::value << std::endl; return 0;}