static static

Steven Schveighoffer schveiguy at yahoo.com
Tue Nov 10 13:21:18 PST 2009


On Tue, 10 Nov 2009 16:15:26 -0500, bearophile <bearophileHUGS at lycos.com>  
wrote:

> Yigal Chripun:
>
>> Regardless of usefulness (or good design) of such variables, this sounds
>> extremely dangerous. The compiler must not change semantics of the
>> program based on optimization. optimizing away such variables most
>> definitely alters the semantics.
>
> Maybe you have misunderstood, or I have explained the things badly. So I  
> explain again.
>
> I have seen that LDC (when it performs link-time optimization, that's  
> not done in all situations) keeps just one copy of constants inside the  
> binary even if such constants are present in more than one template  
> instance. In the situations where LTO is available I think this doesn't  
> cause problems.
>
> Then I am half-seriously proposing a syntax like:
> T foo(T)(T x) {
>   static static int y;
>   // ...
> }
>
> Where the y is now static to (shared among) all instances of the  
> templated function foo. This may be a little error-prone and maybe not  
> that useful, but again here the compiler doesn't change the semantics of  
> the program, because using a double static keyword the programmer has  
> stated such intention.

What's the advantage over:

static int y;

T foo(T)(T x) {
    // ...
}

-Steve



More information about the Digitalmars-d mailing list