Espacios de nombres
Variantes
Acciones

std::is_empty

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) 
Propiedades de tipos
(C++11)
is_empty
(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)
Constantes de rasgos de tipo
Metafunciones
(C++17)
Operaciones admitidas
Relaciones y consultas de propiedades
Modificaciones de tipos
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)

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 is_empty;
(desde C++11)

std::is_empty es un UnaryTypeTrait.

Si T es un tipo vacío (es un tipo clase que no es una unión, con datos miembro no estáticos distintos de campos de bits de tamaño cero, sin funciones virtuales, sin clases base virtuales, y sin clases base que no están vacías), proporciona la constante miembro value igual a true. Para cualquier otro tipo, value es false.

Si T es un tipo clase que no es una unión, T deberá ser un tipo completo; de lo contrario, el comportamiento está indefinido.

El comportamiento de un programa que añade especializaciones para is_emptyo is_empty_v(desde C++17) no está definido.

Contenido

[editar]Parámetros de plantilla

T - Un tipo a comprobar.

[editar]Plantilla de variable auxiliar

template<class T >
inlineconstexprbool is_empty_v = is_empty<T>::value;
(desde C++17)

Heredado de std::integral_constant

Constantes miembro

value
[estático]
true si T es un tipo clase vacío, 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_typebool
typestd::integral_constant<bool, value>

[editar]Notas

Heredar de clases base vacías habitualmente no incrementa el tamaño de una clase debido a la optimización de clase vacía.

std::is_empty<T> y todos los otros rasgos de tipo son clases vacías.

[editar]Ejemplo

#include <iostream>#include <type_traits>   struct A {};   struct B {int m;};   struct C {staticint m;};   struct D {virtual ~D();};   union E {};   struct F {[[no_unique_address]] E e;};   int main(){std::cout<<std::boolalpha;std::cout<<"A "<< std::is_empty<A>::value<<'\n';std::cout<<"B "<< std::is_empty<B>::value<<'\n';std::cout<<"C "<< std::is_empty<C>::value<<'\n';std::cout<<"D "<< std::is_empty<D>::value<<'\n';std::cout<<"E "<< std::is_empty<E>::value<<'\n';std::cout<<"F "<< std::is_empty<F>::value<<'\n';// el resultado depende de la ABI   }

Posible salida:

A true B false C true D false E false F true

[editar]Véase también

(C++11)
Comprueba si un tipo es un tipo clase (pero no un tipo unión).
(plantilla de clase)[editar]
close