A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/language/../algorithm/../ranges/../../cpp/types/remove_cv.html below:

std::remove_cv, std::remove_const, std::remove_volatile - cppreference.com

template< class T >
struct remove_cv;

(1) (since C++11)

template< class T >
struct remove_const;

(2) (since C++11)

template< class T >
struct remove_volatile;

(3) (since C++11)

Provides the member typedef type which is the same as T, except that its topmost cv-qualifiers are removed.

1) Removes the topmost const, or the topmost volatile, or both, if present.

2) Removes the topmost const.

3) Removes the topmost volatile.

If the program adds specializations for any of the templates described on this page, the behavior is undefined.

[edit] Member types Name Definition type the type T without cv-qualifier [edit] Helper types

template< class T >
using remove_cv_t = typename remove_cv<T>::type;

(since C++14)

template< class T >
using remove_const_t = typename remove_const<T>::type;

(since C++14)

template< class T >
using remove_volatile_t = typename remove_volatile<T>::type;

(since C++14) [edit] Possible implementation
template<class T> struct remove_cv { typedef T type; };
template<class T> struct remove_cv<const T> { typedef T type; };
template<class T> struct remove_cv<volatile T> { typedef T type; };
template<class T> struct remove_cv<const volatile T> { typedef T type; };
 
template<class T> struct remove_const { typedef T type; };
template<class T> struct remove_const<const T> { typedef T type; };
 
template<class T> struct remove_volatile { typedef T type; };
template<class T> struct remove_volatile<volatile T> { typedef T type; };
[edit] Example

Removing const/volatile from const volatile int* does not modify the type, because the pointer itself is neither const nor volatile.

#include <type_traits>
 
template<typename U, typename V>
constexpr bool same = std::is_same_v<U, V>;
 
static_assert
(
    same<std::remove_cv_t<int>, int> &&
    same<std::remove_cv_t<const int>, int> &&
    same<std::remove_cv_t<volatile int>, int> &&
    same<std::remove_cv_t<const volatile int>, int> &&
    // remove_cv only works on types, not on pointers
    not same<std::remove_cv_t<const volatile int*>, int*> &&
    same<std::remove_cv_t<const volatile int*>, const volatile int*> &&
    same<std::remove_cv_t<const int* volatile>, const int*> &&
    same<std::remove_cv_t<int* const volatile>, int*>
);
 
int main() {}
[edit] See also

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4