Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2006-05-10 10:14:30


Loïc Joly wrote:
> Peter Dimov a écrit :
>
>>> However, with MSVC8.0, and at least when I compile with /clr, I seem
>>> to have some problem with it : The null fct ptr seems to be coded
>>> 0xffffffff. That is just fine in non /clr compilation, where it gets
>>> evaluated as false when converted in boolean. But in /clr mode, it
>>> is converted to true.
>>
>> I can't reproduce this problem with the following code:
>>
>> #include <boost/shared_ptr.hpp>
>> #include <iostream>
>>
>> int main()
>> {
>> boost::shared_ptr<int> px;
>> std::cout << ( px? true: false ) << std::endl;
>> }
>>
>> compiled as /clr. The compiler does seem to encode a NULL member
>> pointer as -1, but the example prints 0, as it should.
>
> Here is finally some code that reproduces the problem. The compilation
> options are the default ones when creating a "CLR console application"
> project:
>
> // TestBoostSharde_ptrAnd.NET.cpp : main project file.
>
> #include "stdafx.h"
>
> #pragma unmanaged
> #include "boost/shared_ptr.hpp"
>
> class A{};
> typedef boost::shared_ptr<A> APtr;
>
> #pragma managed

Thanks very much. You should probably report this managed/unmanaged
inconsistency as a bug to Microsoft. In the meantime, can you please add the
following:

#elif defined( _MANAGED )

    static void unspecified_bool( this_type*** )
    {
    }

    typedef void (*unspecified_bool_type)( this_type*** );

    operator unspecified_bool_type() const // never throws
    {
        return px == 0? 0: unspecified_bool;
    }

at shared_ptr.hpp:333 and verify if everything works for you. I'll commit it
to 1.34 after your confirmation.

I wonder whether this new and improved unspecified bool could replace the
other variations altogether for 1.35. Member pointers traditionally prove
problematic. :-)


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk