Boost logo

Boost :

From: Loïc Joly (loic.joly_at_[hidden])
Date: 2006-05-10 06:20:13


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

using namespace System;

int main(array<System::String ^> ^args)
{
        A *a = NULL;
        APtr aPtr(a);
        if (aPtr.get())
                    Console::WriteLine(L"KO!");
        else
                    Console::WriteLine(L"Ok!");
        if (aPtr)
                Console::WriteLine(L"KO!");
        else
                Console::WriteLine(L"Ok!");
        return 0;
}

Is displays
Ok!
KO!

Whereas it should display
Ok!
Ok!

Best regards,

-- 
Loïc

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