Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++14) |
Defined in header <type_traits> | ||
template<class T> struct is_pointer; | (since C++11) | |
std::is_pointer
is aUnaryTypeTrait.
Checks whetherT
is apointer to object or function (including pointer tovoid, but excluding pointer to member) or a cv-qualified version thereof. Provides the member constantvalue
which is equal totrue, ifT
is an object/function pointer type. Otherwise,value
is equal tofalse.
If the program adds specializations forstd::is_pointer
orstd::is_pointer_v
, the behavior is undefined.
Contents |
T | - | a type to check |
template<class T> constexprbool is_pointer_v= is_pointer<T>::value; | (since C++17) | |
value [static] | true ifT is a pointer type,false otherwise(public static member constant) |
operator bool | converts the object tobool, returnsvalue (public member function) |
operator() (C++14) | returnsvalue (public member function) |
Type | Definition |
value_type | bool |
type | std::integral_constant<bool, value> |
template<class T>struct is_pointer:std::false_type{}; template<class T>struct is_pointer<T*>:std::true_type{}; template<class T>struct is_pointer<T*const>:std::true_type{}; template<class T>struct is_pointer<T*volatile>:std::true_type{}; template<class T>struct is_pointer<T*constvolatile>:std::true_type{}; |
#include <type_traits> int main(){struct A{int m;void f(){}}; int A::*mem_data_ptr=&A::m;// a pointer to member datavoid(A::*mem_fun_ptr)()=&A::f;// a pointer to member function static_assert(! std::is_pointer<A>::value&&! std::is_pointer_v<A>// same thing as above, but in C++17!&&! std::is_pointer<A>()// same as above, using inherited operator bool&&! std::is_pointer<A>{}// ditto&&! std::is_pointer<A>()()// same as above, using inherited operator()&&! std::is_pointer<A>{}()// ditto&& std::is_pointer_v<A*>&& std::is_pointer_v<Aconst*volatile>&&! std::is_pointer_v<A&>&&! std::is_pointer_v<decltype(mem_data_ptr)>&&! std::is_pointer_v<decltype(mem_fun_ptr)>&& std::is_pointer_v<void*>&&! std::is_pointer_v<int>&& std::is_pointer_v<int*>&& std::is_pointer_v<int**>&&! std::is_pointer_v<int[10]>&&! std::is_pointer_v<std::nullptr_t>&& std::is_pointer_v<void(*)()>);}
(C++11) | checks if a type is a pointer to a non-static member function or object (class template)[edit] |
(C++11) | checks if a type is a non-static member object pointer (class template)[edit] |
(C++11) | checks if a type is a non-static member function pointer (class template)[edit] |
(C++11) | checks if a type is an array type (class template)[edit] |
(C++11) | checks if a type is a scalar type (class template)[edit] |