Spec-Zone.ru › C++

std::meta::bit_size_of

Определено в заголовочном файле <meta>
consteval std::size_t bit_size_of( std::meta::info r );
(начиная с C++26)

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

Параметры

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

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

Если r представляет собой битовое поле, возвращает его ширину в битах.

В противном случае, если r представляет собой описание члена данных, ширина в битах которого не равна ⊥, возвращает эту ширину в битах.

В противном случае возвращает CHAR_BIT * std::meta::size_of(r).

Исключения

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

  • std::meta::dealias(r) представляет одно из следующего:
    • тип
    • объект
    • (скалярное) значение
    • переменную нереференсного типа
    • нестатический член данных
    • безымянное битовое поле
    • отношение прямого базового класса
    • описание члена данных
  • Если std::meta::dealias(r) представляет тип, std::meta::is_complete_type(r) равен true.

Пример

#include <climits>
#include <cstdint>
#include <meta>

static_assert(bit_size_of(^^int) == CHAR_BIT * sizeof(int));
static_assert(bit_size_of(^^int) == std::numeric_limits<int>::digits + 1);

int main()
{
    constexpr struct S { std::uint32_t m{}; } o;
    static_assert(bit_size_of(^^S) == 32);
    static_assert(bit_size_of(^^o) == 32);

    struct B { std::uint64_t m : 42{}; };
    static_assert(bit_size_of(^^B) == 64);
    static_assert(bit_size_of(^^B::m) == 42);
}

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/bit_size_of

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API