Hello,

 

I have a very special problem concerning boost::noncopyable under Windows in a shared library. A class deriving from boost::noncopyable becomes copyable. Strange ? Here is the example code. (Using Visual Studio 2005, no sp, Windows XP):

 

1)      create one static lib with only TestClasses.hpp with the following content in it:
#include <boost/noncopyable.hpp>

class INonCopyNormalClass: boost::noncopyable
{
public:
virtual INonCopyNormalClass* clone() = 0;
};

2)      create one DLL (shared lib) with the following content:

DLLMain.hpp:
#include "../TestLib/TestClasses.hpp"

# if defined(UNCOPYABLETESTDLL_EXPORTS)
# define DLL_API __declspec(dllexport)
# else
# define DLL_API
# endif

class DLL_API AnotherNonNormalCopyClass: public INonCopyNormalClass
{
};

class YetAnotherNonNormalCopyClass: public AnotherNonNormalCopyClass
{
public:
YetAnotherNonNormalCopyClass();

virtual INonCopyNormalClass* clone();
};

 

DLLMain.cpp:
#include "DLLmain.hpp"

YetAnotherNonNormalCopyClass::YetAnotherNonNormalCopyClass()
{
}

INonCopyNormalClass* YetAnotherNonNormalCopyClass::clone()
{
return new YetAnotherNonNormalCopyClass(*this);
}

 

It is quite important that the DLL_API is defined properly !! This seems to be the reason, that the code above compile, links and runs. This should not be possible. The line return new YetAnotherNonNormalCopyClass(*this); should not work. If DLL_API is undefined or removed, you will get the correct error message and compilation fails

 

 

ANY ideas ? SOMEONE ?

 

Thanks and best,

Philipp