Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/header/utility"

From cppreference.com
< cpp‎ | header
(Add exchange (C++14))
(fix {{=}} breakage)
Line 54: Line 54:
  
 
     // exchange:
 
     // exchange:
     template<class T, class U=T> T exchange(T& obj, U&& new_value);
+
     template<class T, class U{{=}}T> T exchange(T& obj, U&& new_value);
  
 
     // forward/move:
 
     // forward/move:

Revision as of 07:12, 20 May 2015

 
 
Standard library headers
General utilities
<any> (C++17)
<bitset>
<bit> (C++20)
<charconv> (C++17)
<expected> (C++23)
<format> (C++20)
<functional>
<optional> (C++17)
<tuple> (C++11)
<typeindex> (C++11)
<utility>
<variant> (C++17)
Containers
<array> (C++11)
<deque>
<flat_map> (C++23)
<flat_set> (C++23)
<forward_list> (C++11)
<inplace_vector> (C++26)   
<list>
<map>
<mdspan> (C++23)
<queue>
<set>
<span> (C++20)
<stack>
<unordered_map> (C++11)
<unordered_set> (C++11)
<vector>
Iterators
<iterator>
Ranges
<generator> (C++23)
<ranges> (C++20)
 

This header is part of the general utility library.

Contents

Includes

<initializer_list>(C++11)

Namespaces

rel_ops Provide automatic comparison operators
Defined in namespace std::rel_ops
automatically generates comparison operators based on user-defined operator== and operator<
(function template) [edit]

Functions

swaps the values of two objects
(function template) [edit]
(C++14)
replaces the argument with a new value and returns its previous value
(function template) [edit]
(C++11)
forwards a function argument and use the type template argument to preserve its value category
(function template) [edit]
(C++11)
converts the argument to an xvalue
(function template) [edit]
converts the argument to an xvalue if the move constructor does not throw
(function template) [edit]
(C++11)
obtains a reference to an object of the template type argument for use in an unevaluated context
(function template) [edit]
creates a pair object of type, determined by the argument types
(function template) [edit]
(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(C++20)
lexicographically compares the values in the pair
(function template) [edit]
specializes the std::swap algorithm
(function template) [edit]
accesses an element of a pair
(function template) [edit]

Classes

implements binary tuple, i.e. a pair of values
(class template) [edit]
tag type used to select correct function overload for piecewise construction
(class) [edit]
implements compile-time sequence of integers
(class template) [edit]
Forward declarations
(C++11)
implements fixed size container, which holds elements of possibly different types
(class template) [edit]
Objects
piecewise construction tag
(tag)[edit]


Synopsis

#include <initializer_list>
 
namespace std {
    // operators:
    namespace rel_ops {
        template<class T> bool operator!=(const T&, const T&);
        template<class T> bool operator> (const T&, const T&);
        template<class T> bool operator<=(const T&, const T&);
        template<class T> bool operator>=(const T&, const T&);
    }
 
    // swap:
    template<class T> void swap(T& a, T& b) noexcept(noexcept(a.swap(b));
    template <class T, size_t N> 
        void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
 
    // exchange:
    template<class T, class U=T> T exchange(T& obj, U&& new_value);
 
    // forward/move:
    template <class T> T&& forward(typename remove_reference<T>::type& t) noexcept;
    template <class T> T&& forward(typename remove_reference<T>::type&& t) noexcept;
    template <class T> typename remove_reference<T>::type&& move(T&&) noexcept;
    template <class T> typename conditional<
        !is_nothrow_move_constructible<T>::value && is_copy_constructible<T>::value,
        const T&, T&&>::type move_if_noexcept(T& x) noexcept;
 
    // declval, as unevaluated operand:
    template <class T>
        typename add_rvalue_reference<T>::type declval() noexcept; 
 
    // pairs:
    template <class T1, class T2> struct pair;
 
    // pair specialized algorithms:
    template <class T1, class T2>
        bool operator==(const pair<T1,T2>&, const
    template <class T1, class T2>
        bool operator< (const pair<T1,T2>&, const pair<T1,T2>&);
    template <class T1, class T2>
        bool operator!=(const pair<T1,T2>&, const pair<T1,T2>&);
    template <class T1, class T2>
        bool operator> (const pair<T1,T2>&, const pair<T1,T2>&);
    template <class T1, class T2>
        bool operator>=(const pair<T1,T2>&, const pair<T1,T2>&);
    template <class T1, class T2>
        bool operator<=(const pair<T1,T2>&, const pair<T1,T2>&);
    template <class T1, class T2>
        void swap(pair<T1,T2>& x, pair<T1,T2>& y) noexcept(noexcept(x.swap(y)));
    template <class T1, class T2>
        pair<V1,V2> make_pair(T1&&, T2&&);
 
    //tuple-like access to pair:
    template <class T> class tuple_size;
    template <size_t I, class T> class tuple_element;
 
    template <class T1, class T2> struct tuple_size<std::pair<T1, T2> >;
    template <class T1, class T2> struct tuple_element<0, std::pair<T1, T2> >;
    template <class T1, class T2> struct tuple_element<1, std::pair<T1, T2> >;
 
    template<size_t I, class T1, class T2>
        typename tuple_element<I, std::pair<T1, T2> >::type& 
        get(std::pair<T1, T2>&) noexcept;
    template<size_t I, class T1, class T2>
        typename tuple_element<I, std::pair<T1, T2> >::type&& 
        get(std::pair<T1, T2>&&) noexcept;
    template<size_t I, class T1, class T2>
        const typename tuple_element<I, std::pair<T1, T2> >::type&
            get(const std::pair<T1, T2>&) noexcept;
 
    // pair piecewise construction
    struct piecewise_construct_t { };
    constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
 
    template <class... Types> class tuple; // defined in <tuple>
}

Class std::pair

template <class T1, class T2>
struct pair {
    typedef T1 first_type;
    typedef T2 second_type;
 
    T1 first;
    T2 second;
    pair(const pair&) = default;
    pair(pair&&) = default;
 
    constexpr pair();
    pair(const T1& x, const T2& y);
    template<class U, class V> pair(U&& x, V&& y);
    template<class U, class V> pair(const pair<U, V>& p);
    template<class U, class V> pair(pair<U, V>&& p);
    template <class... Args1, class... Args2>
        pair(piecewise_construct_t,
             tuple<Args1...> first_args, tuple<Args2...> second_args);
 
    pair& operator=(const pair& p);
    template<class U, class V> pair& operator=(const pair<U, V>& p);
    pair& operator=(pair&& p) noexcept(see below);
    template<class U, class V> pair& operator=(pair<U, V>&& p);
 
    void swap(pair& p) noexcept( noexcept(swap(first, p.first)) &&
                                 noexcept(swap(second, p.second)) );
};

See also

<tuple> Defines std::tuple
Utility library