On 27 Jul 2008, at 21:02, Tim Moore wrote:

>> If you're doing that work, I'd like you to follow a *really*  
>> minimalist stance
> i.e., if a header file only contains pointers or references to  
> another class or
> includes them as arguments in uninstantiated templates (e.g.,
> osg::ref_ptr<foo>), then that classe's include file should not be  
> sucked in; a
> local class declaration should be made instead.
> This will generate more work for you, but is really the way to go in  
> terms of
> reducing compiler dependencies.

For pointers, a forward declaration works - for template, auto_ptr and  
osg::ref_ptr, I'm not totally clear what you mean. With auto_ptr, the  
following can cause problems with virtual destructors not being called  
on older (MSVC6, I think) versions of visual studio:

[the following is from memory of several wasted days a couple of years  
ago, stepping through the generated assembly of MSVC6. I think I have  
the particular case right]

class foo;

class bar
        // no explicit dtor!

        auto_ptr<foo> mFoo;

class wibble : public foo
   virtual ~wibble()
     // .... highly important stuff

   bar a;
   a.mFoo.reset(new wibble);
   // a goes out out scope, its compiler-generated dtor gets run,  
destroying mFoo
// error, wibble's dtor was not run

If we're requiring a never MSVC than that, I believe we're fine. And  
perhaps you meant something else entirely?

>> In C++ code they should be <cstring> and friends in order to ensure  
>> that the
> functions are all declared in the std namespace.

Okay, when I'm bored I'll do the monster patches to fix that.


This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
Flightgear-devel mailing list

Reply via email to