Const template

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Tue Jan 23 01:47:31 PST 2007


Sean Kelly wrote:
> Lionello Lunesu wrote:
>> 'const' is not always a compile time constant. A const in function or 
>> in a class can have a different value for each call/instance. Don't 
>> ask me why.
> 
> I ran into this problem recently:
> 
>     module a;
> 
>     class C
>     {
>         const int val;
> 
>         static this() { val = 1; }
>     }
> 
>     C:\code\src\d\test>dmd test
>     test.d(7): Error: can only initialize const val inside constructor
> 
> I'm sure this is a bug but haven't reported it yet.  Trying to use a 
> static module ctor to init the class const doesn't work either.  But if 
> the const is global then all is well.

I don't see how that is a bug in anything but your code. The error 
message may be a bit unclear in this instance, but I believe it is still 
correct.
Note that it says you need to do it in a constructor, not in a *static* 
constructor (or *module* constructor). You need a plain old constructor 
to initialize that field. That, or the field should have been static.
So you may have meant one of these:
-----
     class C
     {
         static const int val;

         static this() { val = 1; }
     }

     class D
     {
         const int val;

         this() { val = 1; }
     }
-----
The first is for if it's the same for all instances of the class, the 
second if it doesn't change for the lifetime of an instance of the 
class. Neither of these needs to be a compile-time constant; both can be 
determined at runtime.



More information about the Digitalmars-d mailing list