|
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