std::is_object
Min standard notice:
Header: <type_traits>
std::is_object is a UnaryTypeTrait.
# Declarations
template< class T >
struct is_object;
(since C++11)
# Example
#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(&)());
}