Namespaces
Variants

std::meta::size_of

Из ru.cppreference.net
< cpp | meta
 
 
 
Библиотека отражения
Запросы доступности членов
Идентификация области видимости
Запросы членов отражения
Отражение аннотаций
Извлечение значений
Подстановка отражения
Отражение результата выражения
Генерация определения класса

Основные категории типов
Составные категории типов
Свойства типов ➜
Отношения типов
 
Типы и запросы отражения
Запросы отражения
Запросы размещения отражения
Свойства типов
Запросы свойств типов
 
Определён в заголовке <meta>
consteval std::size_t size_of( std::meta::info r );
(начиная с C++26)

Возвращает размер типа или (под)объекта, представленного r.

Параметры

r - значение отражения

Возвращаемое значение

Если r представляет тип «ссылка на T», возвращает sizeof(T*).

В противном случае, если r представляет тип U, возвращает sizeof(U).

В противном случае эквивалентно std::meta::size_of(std::meta::type_of(r)).

Исключения

Выбрасывает std::meta::exception если не выполнены все следующие условия:

  • std::meta::dealias(r) представляет одно из следующего:
  • Если std::meta::dealias(r) представляет тип, std::meta::is_complete_type(r) это true.

Примечания

Эта функция обрабатывает «ссылку на T» так же, как «указатель на T». Это соответствует представлению нестатических ссылочных членов.

Результат ненулевой, даже если r представляет отношение прямого базового класса пустого базового класса.

Пример

#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() {}

См. также

возвращает выравнивание отражённого объекта или типа
(функция)
возвращает размер в битах отражённого объекта или типа
(функция)