Defined in header <type_traits> | ||
---|---|---|
template< class T > struct is_const; | (since C++11) |
If T
is a const-qualified type (that is, const
, or const volatile
), provides the member constant value
equal to true
. For any other type, value
is false
.
The behavior of a program that adds specializations for is_const
or is_const_v
(since C++17) is undefined.
T | - | a type to check |
template< class T > inline constexpr bool is_const_v = is_const<T>::value; | (since C++17) |
value
[static] | true if T is a const-qualified type, false otherwise (public static member constant) |
operator bool | converts the object to bool, returns value (public member function) |
operator()
(C++14) | returns value (public member function) |
Type | Definition |
---|---|
value_type | bool |
type | std::integral_constant<bool, value> |
If T
is a reference type then is_const<T>::value
is always false
. The proper way to check a potentially-reference type for const-ness is to remove the reference: is_const<typename remove_reference<T>::type>
.
template<class T> struct is_const : std::false_type {}; template<class T> struct is_const<const T> : std::true_type {}; |
#include <iostream> #include <type_traits> int main() { std::cout << std::boolalpha << std::is_const_v<int> << '\n' // false << std::is_const_v<const int> << '\n' // true << std::is_const_v<const int*> // false << " because the pointer itself can be changed but not the int pointed at\n" << std::is_const_v<int* const> // true << " because the pointer itself can't be changed but the int pointed at can\n" << std::is_const_v<const int&> << '\n' // false << std::is_const_v<std::remove_reference_t<const int&>> << '\n' // true ; }
Output:
false true false because the pointer itself can be changed but not the int pointed at true because the pointer itself can't be changed but the int pointed at can false true
(C++11) | checks if a type is volatile-qualified (class template) |
(C++17) | obtains a reference to const to its argument (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_const