offsetof
указывается только для работы с типами POD. Если класс содержит какие-либо элементы данных, которые не являются POD, сам класс не является POD. Таким образом, если t
в вашем примере не относится к типу POD, он не гарантированно будет работать.
Из стандарта C ++ (18.1 / 5):
Макрос offsetof
принимает ограниченный набор type
аргументов в этом международном стандарте. type
должен быть структурой POD или объединением POD.
Таким образом, если вы используете offsetof
для не POD-типа, результаты не определены.