AT
Size: a a a
AT
VS
v
static_assert((uintptr_t)nullptr == 0);
и тогда можно инициализировать указатели битовым нулем. То есть мне кажется, перевели из UB в implementation defined.S
static_assert((uintptr_t)nullptr == 0);
и тогда можно инициализировать указатели битовым нулем. То есть мне кажется, перевели из UB в implementation defined.AT
m
struct S {Такой код был UB. В 20ом стандарте UB нет, но срабатывание assert'а зависит от битового представления nullptr.
void* p;
};
S* s = reinterpret_cast<S*>(calloc(sizeof(int))); // note this memory guaranteed to be filled with zeros
assert(s->p == nullptr);
AN
VS
static_assert((uintptr_t)nullptr == 0);
и тогда можно инициализировать указатели битовым нулем. То есть мне кажется, перевели из UB в implementation defined.uintptr_t
nullptr
имеет представление 0. представление nullptr
для всех остальных типов она никак не затрагиваетAN
S
ПК
0
v
ПК