Нет никакой гарантии, что std::atomic<T>
не содержит ничего, кроме T
, и имеет те же требования к размеру и выравниванию, что и T
.Например, если sizeof(T) == 3
, реализация std::atomic<T>
может заполнить его до 4 байтов, чтобы разрешить использование встроенных функций.В другом примере, если sizeof(T)
слишком велико для встроенной функции, std::atomic<T>
может хранить некоторый примитив синхронизации для сериализации операции.
Следовательно, reinterpret_cast
- std::atomic
не являетсяжизнеспособная реализация в общем случае, даже если вы игнорируете общее неопределенное поведение из-за нарушений объектной модели.