Есть вот такой фрагмент:
template < typename T > void UnalignedWrite ( void * pPtr, const T & tVal )
{
*(T*)pPtr = tVal;
}
При его компиляции (gcc 4.4.3) всякий раз выскакивает упомянутое в теме топика предупреждение.
Как его победить?
Пробовал вот так:
template < typename T > void UnalignedWrite ( void * pPtr, const T & tVal )
{
union {
void *pVoid;
T *pT;
} u;
u.pVoid = pPtr;
*u.pT = tVal;
}
— не помогает. Выскакивает то же самое предупреждение, но уже на строчку *u.pT = tVal.
Если сделать внутри вот так:
u.pT = NULL;
u.pVoid = pPtr;
*u.pT = tVal;
— ситуация не меняется. Однако если при этом закомментировать вторую строку, вот так:
u.pT = NULL;
//u.pVoid = pPtr;
*u.pT = tVal;
— то предупреждение исчезает (однако очевидно, что и смысла в таком коде нет. Разве что загадить системный лог сегфолтами).
ЗЫ: предупреждение по факту возникает в проекте при инстанциировании шаблона с T = int или uint.