
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