4using flat_type_t1 = std::remove_cv_t<std::remove_reference_t<std::decay_t<Type>>>;
7using flat_type_t2 = std::remove_cv_t<std::decay_t<std::remove_reference_t<Type>>>;
14 const int array[]{10};
16 using type_of_array =
decltype(array);
17 using ref_type_of_array =
decltype((array));
27int sum(
int,
float) {
return 0; }
29template<
typename Type>
32 using type = std::remove_reference_t<Type>;
34 if constexpr(std::is_array_v<type> || std::is_function_v<type>)
35 return std::decay_t<type>(std::forward<Type>(arg));
37 return std::forward<Type>(arg);
42 const int const_array[]{1, 2, 3, 4};
44 int array[] {1, 2, 3};
52 decay(std::move(const_array));
54 decay(std::move(array));
std::remove_cv_t< std::remove_reference_t< std::decay_t< Type > > > flat_type_t1
std::remove_cv_t< std::decay_t< std::remove_reference_t< Type > > > flat_type_t2
decltype(auto) decay(Type &&arg)
Stream output operators << are implemented.
#define Tpf_GetTypeName(type_arg)
A macro that returns type_arg's string name.