Namespaces
Variants

std::experimental::ranges:: swap

From cppreference.net
Definido en el encabezado <experimental/ranges/utility>
namespace {

constexpr /* no especificado */ swap = /* no especificado */ ;

}
(ranges TS)
(objeto de punto de personalización)
Firma de llamada
template < class T, class U >

requires /* ver más abajo */

void swap ( T && t, U && u ) noexcept ( /* ver más abajo */ ) ;

Intercambia los valores referenciados por t y u .

Una llamada a ranges::swap es equivalente a:

1) ( void ) swap ( std:: forward < T > ( t ) , std:: forward < U > ( u ) ) , si esa expresión es válida, donde la resolución de sobrecarga se realiza con los siguientes candidatos:
Si la función seleccionada por la resolución de sobrecarga no intercambia los valores referenciados por t y u , el programa está mal formado; no se requiere diagnóstico.
2) En caso contrario, ( void ) ranges:: swap_ranges ( t, u ) , si T y U son referencias lvalue a tipos de arreglo de igual extensión (pero posiblemente con diferentes tipos de elemento) y ranges:: swap ( * t, * u ) es una expresión válida.
3) En caso contrario, si T y U son ambos V& para algún tipo V que cumple con los requisitos sintácticos de MoveConstructible < V > y Assignable < V & , V > , intercambia los valores referenciados como si fuera mediante V v { std :: move ( t ) } ; t = std :: move ( u ) ; u = std :: move ( v ) ; . Si los requisitos semánticos de alguno de los conceptos no se cumplen, el programa está mal formado; no se requiere diagnóstico.
4) En todos los demás casos, una llamada a ranges::swap está mal formada.

ranges:: swap puede utilizarse en una expresión constante si cada función que llama (según lo especificado anteriormente) puede utilizarse de esta manera.

Contenidos

Objetos de punto de personalización

El nombre ranges::swap denota un objeto de punto de personalización , que es un objeto función de tipo literal Semiregular (denotado, con fines expositivos, como SwapT ). Todas las instancias de SwapT son iguales. Por lo tanto, ranges::swap puede copiarse libremente y sus copias pueden utilizarse indistintamente.

Dado un conjunto de tipos Args... , si std:: declval < Args > ( ) ... cumplen los requisitos para argumentos de ranges::swap mencionados anteriormente, SwapT satisfará ranges :: Invocable < const SwapT, Args... > . De lo contrario, ningún operador de llamada a función de SwapT participa en la resolución de sobrecarga.

En cada unidad de traducción en la que ranges::swap está definido, se refiere a la misma instancia del objeto de punto de personalización. (Esto significa que puede usarse libremente en elementos como funciones inline y plantillas de funciones sin violar la regla de una definición .)

Excepciones

1)
noexcept especificación:
noexcept ( noexcept ( ( void ) swap ( std:: forward < T > ( t ) , std:: forward < T > ( u ) ) ) )
, donde swap se encuentra como se describe anteriormente.
2)
noexcept especificación:
noexcept ( noexcept ( ranges:: swap ( * t, * u ) ) )
3)
noexcept especificación:

Ejemplo

Véase también

intercambia los valores de dos objetos
(plantilla de función)