Backport
utility.hpp File Reference

This header provides definitions from the C++ header <utility> More...

#include "detail/config.hpp"
#include "detail/move.hpp"
#include "type_traits.hpp"
#include <utility>
#include <cstddef>
+ Include dependency graph for utility.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  bpstd::in_place_t
 This function is a special disambiguation tag for variadic functions, used in any and optional. More...
 
struct  bpstd::in_place_type_t< T >
 This function is a special disambiguation tag for variadic functions, used in any and optional. More...
 
struct  bpstd::in_place_index_t< I >
 This function is a special disambiguation tag for variadic functions, used in any and optional. More...
 
struct  bpstd::integer_sequence< T, Ints >
 

Typedefs

template<typename T , typename U >
using bpstd::pair = std::pair< T, U >
 
template<std::size_t... Ints>
using bpstd::index_sequence = integer_sequence< std::size_t, Ints... >
 
template<typename T , T N>
using bpstd::make_integer_sequence = typename detail::make_integer_sequence_impl< T,(N==T(0)), N >::type
 
template<std::size_t N>
using bpstd::make_index_sequence = make_integer_sequence< std::size_t, N >
 
template<typename... T>
using bpstd::index_sequence_for = make_index_sequence< sizeof...(T)>
 

Functions

template<typename T >
constexpr bpstd::conditional< !bpstd::is_nothrow_move_constructible< T >::value &&bpstd::is_copy_constructible< T >::value, const T &, T && >::type bpstd::move_if_noexcept (T &x) noexcept
 Moves a type x if it move-construction is non-throwing. More...
 
template<typename T >
constexpr add_const_t< T > & bpstd::as_const (T &t) noexcept
 Forms an lvalue reference to const type of t. More...
 
template<typename T >
void bpstd::as_const (const T &&)=delete
 
template<typename T , typename U = T>
BPSTD_CPP14_CONSTEXPR T bpstd::exchange (T &obj, U &&new_value)
 Replaces the value of obj with new_value and returns the old value of obj. More...
 
template<std::size_t N, typename T , typename U >
constexpr conditional_t< N==0, T, U > & bpstd::get (pair< T, U > &p) noexcept
 
template<std::size_t N, typename T , typename U >
constexpr conditional_t< N==0, T, U > && bpstd::get (pair< T, U > &&p) noexcept
 
template<std::size_t N, typename T , typename U >
constexpr const conditional_t< N==0, T, U > & bpstd::get (const pair< T, U > &p) noexcept
 
template<std::size_t N, typename T , typename U >
constexpr const conditional_t< N==0, T, U > && bpstd::get (const pair< T, U > &&p) noexcept
 
template<typename T , typename U >
constexpr T & bpstd::get (pair< T, U > &p) noexcept
 
template<typename T , typename U >
constexpr T && bpstd::get (pair< T, U > &&p) noexcept
 
template<typename T , typename U >
constexpr const T & bpstd::get (const pair< T, U > &p) noexcept
 
template<typename T , typename U >
constexpr const T && bpstd::get (const pair< T, U > &&p) noexcept
 
template<typename T , typename U >
constexpr T & bpstd::get (pair< U, T > &p) noexcept
 
template<typename T , typename U >
constexpr const T & bpstd::get (const pair< U, T > &p) noexcept
 
template<typename T , typename U >
constexpr T && bpstd::get (pair< U, T > &&p) noexcept
 
template<typename T , typename U >
constexpr const T && bpstd::get (const pair< U, T > &&p) noexcept
 

Variables

constexpr BPSTD_CPP17_INLINE in_place_t bpstd::in_place {}
 

Detailed Description

This header provides definitions from the C++ header <utility>

Definition in file utility.hpp.

Function Documentation

◆ as_const()

template<typename T >
constexpr add_const_t<T>& bpstd::as_const ( T &  t)
constexprnoexcept

Forms an lvalue reference to const type of t.

Parameters
tthe type to form an lvalue reference to
Returns
the reference to const T

◆ exchange()

template<typename T , typename U = T>
BPSTD_CPP14_CONSTEXPR T bpstd::exchange ( T &  obj,
U &&  new_value 
)

Replaces the value of obj with new_value and returns the old value of obj.

Precondition
T must meet the requirements of MoveConstructible.
It must be possible to move-assign objects of type U to objects of type T
Parameters
objobject whose value to replace
new_valuethe value to assign to obj

◆ move_if_noexcept()

template<typename T >
constexpr bpstd::conditional< !bpstd::is_nothrow_move_constructible<T>::value && bpstd::is_copy_constructible<T>::value, const T&, T&& >::type bpstd::move_if_noexcept ( T &  x)
constexprnoexcept

Moves a type x if it move-construction is non-throwing.

Parameters
xthe parameter to move
Returns
an rvalue reference if nothrow moveable, const reference otherwise