table of contents
        
      
      
    | std::remove_all_extents(3) | C++ Standard Libary | std::remove_all_extents(3) | 
NAME¶
std::remove_all_extents - std::remove_all_extents
Synopsis¶
 Defined in header <type_traits>
  
   template< class T > (since C++11)
  
   struct remove_all_extents;
  
   If T is a multidimensional array of some type X, provides the member typedef
    type
  
   equal to X, otherwise type is T.
  
   If the program adds specializations for std::remove_all_extents, the behavior
    is
  
   undefined.
Member types¶
 Name Definition
  
   type the type of the element of T
Helper types¶
 template< class T > (since C++14)
  
   using remove_all_extents_t = typename remove_all_extents<T>::type;
Possible implementation¶
 template<class T>
  
   struct remove_all_extents { typedef T type; };
  
   template<class T>
  
   struct remove_all_extents<T[]> {
  
   typedef typename remove_all_extents<T>::type type;
  
   };
  
   template<class T, std::size_t N>
  
   struct remove_all_extents<T[N]> {
  
   typedef typename remove_all_extents<T>::type type;
  
   };
Example¶
// Run this code
  
   #include <iostream>
  
   #include <type_traits>
  
   #include <typeinfo>
  
   template<class A>
  
   void info(const A&)
  
   {
  
   typedef typename std::remove_all_extents<A>::type Type;
  
   std::cout << "underlying type: " << typeid(Type).name()
    << '\n';
  
   }
  
   int main()
  
   {
  
   float a0;
  
   float a1[1][2][3];
  
   float a2[1][1][1][1][2];
  
   float* a3;
  
   int a4[3][2];
  
   double a5[2][3];
  
   struct X { int m; } x0[3][3];
  
   info(a0);
  
   info(a1);
  
   info(a2);
  
   info(a3);
  
   info(a4);
  
   info(a5);
  
   info(x0);
  
   }
Possible output:¶
 underlying type: float
  
   underlying type: float
  
   underlying type: float
  
   underlying type: float*
  
   underlying type: int
  
   underlying type: double
  
   underlying type: main::X
See also¶
 is_array checks if a type is an array type
  
   (C++11) (class template)
  
   rank obtains the number of dimensions of an array type
  
   (C++11) (class template)
  
   extent obtains the size of an array type along a specified dimension
  
   (C++11) (class template)
  
   remove_extent removes one extent from the given array type
  
   (C++11) (class template)
| 2024.06.10 | http://cppreference.com |