检查指针是否为16字节对齐

时间:2018-01-04 10:28:49

标签: c++ pointers casting integer truncation

我正在尝试在MingW-w64上编译OpenEXR库。我收到以下编译错误,因为gcc抱怨截断:

ImfOptimizedPixelReading.h:73:50: error: cast from 'const void* __restrict__'
to 'long unsigned int' loses precision [-fpermissive]

     unsigned long trailingBits = ((unsigned long)pPointer) & 15;
                                                  ^

我可以在我自己的工具链上轻松解决这个问题,例如通过转换为uintptr_t而不是unsigned long,但我无法推送此补丁,因为它只是c ++ 11,因此会破坏兼容性与其他编译器。

此函数仅检查尾随位是否全为零并返回true / false

在保持至少c ++ 98兼容的同时,最便携的方法是什么?我已经测试了static_cast<unsigned long>,但我得到了另一个错误。

0 个答案:

没有答案