Boost logo

Boost :

From: Thyfate (thyfate_at_[hidden])
Date: 2006-04-06 13:50:56

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

        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;

Boost list run by bdawes at, gregod at, cpdaniel at, john at