home | help
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 be-
     havior 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 dimen-
     sion
	(C++11)       (class template)
	remove_extent removes one extent from the given array type
	(C++11)       (class template)

http://cppreference.com 	   2024.06.10	      std::remove_all_extents(3)

home | help