home | help
std::is_object(3)	       C++ Standard Libary	       std::is_object(3)

NAME
     std::is_object - std::is_object

Synopsis
	Defined in header <type_traits>
	template< class T >		 (since C++11)
	struct is_object;

	std::is_object is a UnaryTypeTrait.

	If  T  is  an  object type (that is any possibly cv-qualified type other
     than function,
	reference, or void types), provides  the  member  constant  value  equal
     true. For any
	other type, value is false.

	If  the  program  adds specializations for std::is_object or std::is_ob-
     ject_v, the
	behavior is undefined.

Template parameters
	T - a type to check

	Helper variable template

	template< class T >					  (since C++17)
	inline constexpr bool is_object_v = is_object<T>::value;

     Inherited from std::integral_constant

Member constants
	value	 true if T is an object type, false otherwise
	[static] (public static member constant)

Member functions
	operator bool converts the object to bool, returns value
		      (public member function)
	operator()    returns value
	(C++14)       (public member function)

Member types
	Type	   Definition
	value_type bool
	type	   std::integral_constant<bool, value>

Possible implementation
	template<class T>
	struct is_object : std::integral_constant<bool,
			       std::is_scalar<T>::value ||
			       std::is_array<T>::value ||
			       std::is_union<T>::value ||
			       std::is_class<T>::value> {};

Example
     // Run this code

      #include <iomanip>
      #include <iostream>
      #include <type_traits>

      #define IS_OBJECT(...) \
	  std::cout  <<  std::boolalpha  <<   std::left   <<   std::setw(9)   <<
     #__VA_ARGS__ \
		    << (std::is_object_v<__VA_ARGS__> ? " is object\n" \
						      : " is not an object\n")

      int main()
      {
	  class cls {};

	  IS_OBJECT(void);
	  IS_OBJECT(int);
	  IS_OBJECT(int&);
	  IS_OBJECT(int*);
	  IS_OBJECT(int*&);
	  IS_OBJECT(cls);
	  IS_OBJECT(cls&);
	  IS_OBJECT(cls*);
	  IS_OBJECT(int());
	  IS_OBJECT(int(*)());
	  IS_OBJECT(int(&)());
      }

Output:
      void	is not an object
      int	is object
      int&	is not an object
      int*	is object
      int*&	is not an object
      cls	is object
      cls&	is not an object
      cls*	is object
      int()	is not an object
      int(*)()	is object
      int(&)()	is not an object

See also
	is_scalar checks if a type is a scalar type
	(C++11)   (class template)
	is_array  checks if a type is an array type
	(C++11)   (class template)
	is_union  checks if a type is a union type
	(C++11)   (class template)
	is_class  checks if a type is a non-union class type
	(C++11)   (class template)

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

home | help