
The following program compiled with MSVC8 gives different results between intrinsics and boost type traits (in the wrong sense: as if the type traits library knew more about the classes than the compiler) It seems to me this is related to a bug in MSVC8 intrinsics which should not consider class two (see program below) as a POD type... The library should thus not use the __is_pod intrinsics... though I can not find in the standard a place where it is said that POD types should not have constructors... (but then class one should also be of pod type) Could someone please confirm/propose a fix? Thanks in advance, Charles-Antoine Giuliani #include <iostream> #include <boost/type_traits.hpp> struct one { one() :i(1) { } int i; }; struct two { one j; }; #define F(a) #a << ": " << (a) int main() { std::cout << F(__is_pod(one)) << '\n'; std::cout << F(boost::is_pod<one>::value) << '\n'; std::cout << '\n'; std::cout << F(__is_pod(two)) << '\n'; std::cout << F(boost::is_pod<two>::value) << '\n'; std::cout << '\n'; std::cout << F(__has_trivial_constructor(one)) << '\n'; std::cout << F(boost::has_trivial_constructor<one>::value) << '\n'; std::cout << '\n'; std::cout << F(__has_trivial_constructor(two)) << '\n'; std::cout << F(boost::has_trivial_constructor<two>::value) << '\n'; std::cout << '\n'; //Program output: //__is_pod(one): 0 //boost::is_pod<one>::value: 0 // //__is_pod(two): 1 //boost::is_pod<two>::value: 1 // //__has_trivial_constructor(one): 0 //boost::has_trivial_constructor<one>::value: 0 // //__has_trivial_constructor(two): 0 //boost::has_trivial_constructor<two>::value: 1 return 0; }