std::remove_all_extents (3) - Linux Manuals

std::remove_all_extents: std::remove_all_extents

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.

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 foo(const A&)
  {
      typedef typename std::remove_all_extents<A>::type Type;
      std::cout << "underlying type: " << typeid(Type).name() << '\n';
  }


  int main()
  {
      float a1[1][2][3];
      int a2[3][2];
      float a3[1][1][1][1][2];
      double a4[2][3];


      foo(a1);
      foo(a2);
      foo(a3);
      foo(a4);
  }

Possible output:


  underlying type: f
  underlying type: i
  underlying type: f
  underlying type: d

See also


is_array checks if a type is an array type
              (class template)
(C++11)


rank obtains the number of dimensions of an array type
              (class template)
(C++11)


extent obtains the size of an array type along a specified dimension
              (class template)
(C++11)


remove_extent removes one extent from the given array type
              (class template)
(C++11)