Espacios de nombres
Variantes
Acciones

std::has_unique_object_representations

De cppreference.com
< cpp‎ | types
 
 
Biblioteca de metaprogramación
Rasgos de tipo
Categorías de tipo
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)(en desuso en C++26)
(C++11)(hasta C++20*)
(C++11)(en desuso en C++20)
(C++11)
has_unique_object_representations
(C++17)
Constantes de rasgos de tipo
Metafunciones
(C++17)
Operaciones admitidas
Relaciones y consultas de propiedades
Modificaciones de tipos
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)(en desuso en C++23)
(C++11)(en desuso en C++23)
(C++11)
(C++11)(hasta C++20*)(C++17)

(C++11)
(C++17)
Aritmética racional en tiempo de compilación
Secuencias de enteros en tiempo de compilación
 
Definido en el archivo de encabezado <type_traits>
template< class T >
struct has_unique_object_representations;
(desde C++17)

std::has_unique_object_representations es un UnaryTypeTrait.

Si T es TriviallyCopyable y dos objetos cualquiera de tipo T con el mismo valor tienen la misma representación de objeto, proporciona la constante miembro value igual a true. Para cualquier otro tipo, value es false.

Para los propósitos de este rasgo, dos arrays tienen el mismo valor si sus elementos tienen los mismos valores, dos clases que no son uniones tienen el mismo valor si sus subobjetos directos tienen el mismo valor, y dos uniones tienen el mismo valor si tienen el mismo miembro activo y el valor de ese miembro es el mismo.

Está definido por la implementación cuales tipos escalares satisfacen este rasgo, pero se garantiza que tipos enteros sin signo (hasta C++20) que no usen bits de relleno tendrán representaciones de objeto únicas.

El comportamiento está indefinido si T es un tipo incompleto excepto (posiblemente calificado-cv) void o array de límite desconocido.

El comportamiento de un programa que añade especializaciones para has_unique_object_representations o has_unique_object_representations_v no está definido.

Contenido

[editar] Parámetros de plantilla

T - Un tipo a comprobar.

[editar] Plantilla de variable auxiliar

template< class T >

inline constexpr bool has_unique_object_representations_v =

    has_unique_object_representations<T>::value;
(desde C++17)

Heredado de std::integral_constant

Constantes miembro

value
[estático]
true si T tiene representaciones de objeto únicas, de lo contrario false.
(constante miembro pública estática)

Funciones miembro

operator bool
Convierte el objeto a bool, devuelve value.
(función miembro pública)
operator()
(C++14)
Devuelve value.
(función miembro pública)

Tipos miembro

Tipo Definición
value_type bool
type std::integral_constant<bool, value>

[editar] Notas

Este rasgo se introdujo para hacer posible determinar si un tipo puede ser resumido (hashed) correctamente al resumir su representación de objeto como un array de bytes.

[editar] Ejemplo

#include <iostream>
#include <type_traits>
 
struct foo
{
    char c;
    float f;
    short st;
    int i;
};
 
struct bar
{
    int a;
    int b;
};
 
int main()
{   
     std::cout  << std::boolalpha 
                << "Tiene foo representaciones de objeto únicas? "
                << std::has_unique_object_representations_v<foo> << '\n'
                << "Tiene bar representaciones de objeto únicas? " 
                << std::has_unique_object_representations_v<bar> << '\n';
}

Posible salida:

Tiene foo representaciones de objeto únicas? false
Tiene bar representaciones de objeto únicas? true

[editar] Véase también

Comprueba si un tipo es un tipo de diseño estándar.
(plantilla de clase) [editar]
(C++11)
Objeto función de dispersión (hash).
(plantilla de clase) [editar]