Namespaces
Variants

std::meta::size_of

De es.cppreference.net
< cpp | meta
 
 
 
Biblioteca de reflexión
 
Tipos y consultas de reflexión
Consultas de reflexión
Consultas de diseño de reflexión
Propiedades de tipo
Consultas de propiedades de tipo
 
Definido en el encabezado <meta>
consteval std::size_t size_of( std::meta::info r );
(desde C++26)

Devuelve el tamaño del tipo o (sub)objeto representado por r.

Parámetros

r - un valor de reflexión

Valor de retorno

Si r representa un tipo “referencia a T”, devuelve sizeof(T*).

De lo contrario, si r representa un tipo U, devuelve sizeof(U).

De lo contrario, equivalente a std::meta::size_of(std::meta::type_of(r)).

Excepciones

Lanza std::meta::exception a menos que se cumplan todas las siguientes condiciones:

  • std::meta::dealias(r) representa uno de los siguientes:
  • Si std::meta::dealias(r) representa un tipo, std::meta::is_complete_type(r) es true.

Notas

Esta función trata “referencia a T” igual que “puntero a T”. Esto coincide con la representación de los miembros de referencia no estáticos.

El resultado es distinto de cero incluso si r representa una relación de clase base directa de una clase base vacía.

Ejemplo

#include <meta>

static_assert(std::meta::size_of(^^int) == sizeof(int));
static_assert(std::meta::size_of(^^int*) == sizeof(int*));

consteval bool test()
{
    struct A; 
    // constexpr auto _ = std::meta::size_of(^^A);
        // error: uncaught exception of type 'std::meta::exception';
        // 'what()': 'reflection with incomplete type in size_of'
    return true;
}
static_assert(test());

struct B { int i, j; };
static_assert(sizeof(B) == std::meta::size_of(^^B));

template<class T>
struct C { T m; };
static_assert(size_of(^^C<char>) == sizeof(char));

struct D { int x : 015; };
static_assert(size_of(^^D) == sizeof(int));

// static_assert(size_of(^^D::x) == sizeof(int));
    // error: uncaught exception of type 'std::meta::exception';
    // 'what()': 'reflection not suitable for size_of'

int main() {}

Véase también

devuelve la alineación del objeto o tipo reflejado
(función)
devuelve el tamaño en bits del objeto o tipo reflejado
(función)