
Le 01/09/11 19:39, John Maddock a écrit :
OK I'm curious - why would a compiler intrinsic work when used with one std lib, not not when used with another?
Here is the details:
libstdc++ (of gcc-4.2) defines `struct __is_pod` in some header file. To deal with this, clang disables __is_pod intrinsics when finding `struct __is_pod`; then, __is_pod is not treated as keyword and it becomes just an identifier. However, even in this case, old clang sets __has_feature(is_pod) to 1. So we cannot rely on `#if __has_feature(is_pod)` to check the availability of __is_pod intrinsics.
libc++ does not define `struct __is_pod`, so we can safely check the availability of __is_pod intrinsics by `#if __has_feature(is_pod)`.
Ditto for __is_empty.
Got it, that's just plain nasty isn't it? Yes. It seems that C++ compiler and C++ standard library providers shouldn't use the same prefix for the intrinsics and the internals.
Best, Vicente