Manifest constants (was const again)
Robert DaSilva
sp.unit.262+digitalmars at gmail.com
Sun Dec 9 20:03:08 PST 2007
Bruce Adams wrote:
> On Sat, 08 Dec 2007 19:44:50 -0000, Janice Caron
> <caron800 at googlemail.com> wrote:
>
>> On 12/8/07, Walter Bright <newshound1 at digitalmars.com> wrote:
>>> No, that would be:
>>>
>>> enum defname = "upload.log";
>>> enum float fudge = 61.74;
>>> enum char starter = 'r';
>>> enum qwerty = 0xF4;
>>> enum foobar = SomeFunc("foobar");
>>
>> The first one is interesting. Can I do
>>
>> enum s = "hello";
>> auto p = s.ptr;
>>
>> ?
>
> You're just evil aren't you? If its a manifest constant you can't take
> its address
> without making it manifest beyond the compiler. That means the .ptr
> property is not useable.
> I think that should be a compile time error.
>
> I don't really understand the problem myself.
> I always thought it was common sense that a 'simple' constant should
> only take
> up space:
>
> 1) If it is used
> 1a) if it is never used it should use no space
> 1b) if it is used only a few times its the compilers decision whether to
> place it in .bss
> 2) If you need to take the address of it
>
> I had assumed this was the case in D.
> I guess the problem is to do with modules. You don't know at compile
> time whether it will
> be used. So I guess you do need a way to say don't use any space after all.
It would be valid because "hello".ptr is valid, but &1 isn't valid. See
the difference?
More information about the Digitalmars-d
mailing list