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);
}
См. также
|
(C++26) | возвращает выравнивание отражённого объекта или типа (функция) |
|
(C++26) | возвращает размер отражённого объекта или типа в байтах (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/bit_size_of