AP
Чтобы повредить this нужно делать прям суровое language level UB
Size: a a a
AP
CD
CD
NM
NM
NM
S
NM
NM
S
S
NM
АК
NM
S
O
#define CURIOUS_LOOPHOLED_COUNTER_LIMIT 10
...
static_assert(clc::counter() == 1, "");
static_assert(clc::counter() == 2, "");
static_assert(clc::counter() == 3, "");
...
static_assert(clc::counter() == 9, "");
static_assert(clc::counter() == 10, ""); // Failed
Работает, как указано, на Clang >= 3.9 и GCC >= 7.1. MSVC как всегда, его я не спешу указывать, он тоже работает, но явно не последовательные значения выдаёт, так что его пока не указал, для msvc 19.14:static_assert(
clc::counter() != clc::counter()
&& clc::counter() != clc::counter(), "");
а
O
PZ
#define CURIOUS_LOOPHOLED_COUNTER_LIMIT 10
...
static_assert(clc::counter() == 1, "");
static_assert(clc::counter() == 2, "");
static_assert(clc::counter() == 3, "");
...
static_assert(clc::counter() == 9, "");
static_assert(clc::counter() == 10, ""); // Failed
Работает, как указано, на Clang >= 3.9 и GCC >= 7.1. MSVC как всегда, его я не спешу указывать, он тоже работает, но явно не последовательные значения выдаёт, так что его пока не указал, для msvc 19.14:static_assert(
clc::counter() != clc::counter()
&& clc::counter() != clc::counter(), "");