Begin forwarded message:

From: Curt Arnold <[EMAIL PROTECTED]>
Date: March 15, 2005 4:15:01 PM CST
To: Log4J Users List <log4j-user@logging.apache.org>
Subject: Re: Build namespace issues

On Mar 15, 2005, at 3:31 PM, Ron Ohmer wrote:

I ran into a rather odd error when using SocketAppenders.
 
I have a wrapper that has worked fine, no warnings, nothing until I added functionality for the SocketAppender..
 
Now I get what follows this..  Does anyone know the root of this (Other than SocketAppender.cpp.. :-))   BTW, VS.NET 2k3 is the build tool.



The problem is that pervasively throughout log4cxx (even the CVS HEAD), you see a construct like:


                class SocketImpl;
                typedef helpers::ObjectPtrT<SocketImpl> SocketImplPtr;

When one of these smart-pointer templates is used in a publicly exposed method on a exported class, you end up with an exported method depending on a non-exported class. If the template expansion differs in any way from the expansion when the library was build, bad things will happen hence the warning.

What should be done is something like:

class SocketImpl;
class LOG4CXX_EXPORT SocketImplPtr : public helpers::ObjectPtrT<SocketImpl> {
...
}


I'll log this as a bug and work on it as soon I finish my current task (likely 24-48 hours away).





Reply via email to