ordering of constructors

Joe Buck Joe.Buck@synopsys.COM
Fri Apr 9 17:22:00 GMT 2004


On Fri, Apr 09, 2004 at 10:52:00AM -0400, Daniel Jacobowitz wrote:
> On Fri, Apr 09, 2004 at 03:33:20PM +0200, Gabriel Dos Reis wrote:
> >   It is implementation-defined whether or not the dynamic
> >   initialization (8.5, 9.4, 12.1, 12.6.1) of an object of namespace
> >   scope is done before the first statement of main. If the
> >   initialization is deferred to some point in time after the first
> >   statement of main, *it shall occur before the first use of any
> >   function or object defined in the same translation unit as the
> >   object to be initialized*. 
> 
> Does that answer the question?  I don't believe that it does.  In this
> case, the initialization is _not_ deferred until after the first
> statement of main.  Instead, we're before main executing global
> constructors.
> 
> To honor your interpretation of that paragraph, we would have to check
> at the beginning of every external function in every translation unit
> containing static variables whether they had been initialized yet,
> which would be prohibitively expensive - and I'm pretty sure we don't
> do that.

It's worse than that; an attempt to provide the guarantee before main
is called fails in cases where constructors in file A.cpp depend on
the construction of objects in B.cpp and vice versa: an attempt to
provide the guarantee would cause a deadlock.



More information about the Gcc mailing list