Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 12, 2015 Compiler doesn't complain with multiple definitions | ||||
---|---|---|---|---|
| ||||
I was playing with __traits and tried the code below. Shouldn't the compiler emit a warning that I'm defining isPOD multiple times and/or I'm defining something that is built-in like isPOD? // DMD64 D Compiler v2.069 import std.stdio; struct isPOD { bool status = false; } int main() { byte isPOD = 0; writeln(isPOD); writeln(__traits(isPOD, typeof(isPOD))); return 0; } |
November 12, 2015 Re: Compiler doesn't complain with multiple definitions | ||||
---|---|---|---|---|
| ||||
Posted in reply to ric maicle | On 12.11.2015 06:27, ric maicle wrote:
> I was playing with __traits and tried the code below.
> Shouldn't the compiler emit a warning that I'm defining isPOD
> multiple times and/or I'm defining something that is built-in
> like isPOD?
>
> // DMD64 D Compiler v2.069
> import std.stdio;
>
> struct isPOD {
> bool status = false;
> }
>
> int main()
> {
> byte isPOD = 0;
> writeln(isPOD);
> writeln(__traits(isPOD, typeof(isPOD)));
> return 0;
> }
__traits has special syntax. The first "argument" must be from a list of special keywords that only have special meaning in that place. You can't put the name of a struct there, and you can't put the special keyword anywhere else. So there's no ambiguity, and you're not redefining anything. Everything's fine.
|
November 12, 2015 Re: Compiler doesn't complain with multiple definitions | ||||
---|---|---|---|---|
| ||||
Posted in reply to anonymous | On Thursday, 12 November, 2015 07:50 PM, anonymous wrote:
> __traits has special syntax. The first "argument" must be from a list of
> special keywords that only have special meaning in that place. You can't
> put the name of a struct there, and you can't put the special keyword
> anywhere else. So there's no ambiguity, and you're not redefining
> anything. Everything's fine.
Thanks for clarifying __traits.
On another thing. I'm wondering why the compiler didn't issue a warning
on struct isPOD and byte isPOD? Isn't this called 'shadowing' or have I
misunderstood the term?
|
November 12, 2015 Re: Compiler doesn't complain with multiple definitions | ||||
---|---|---|---|---|
| ||||
Posted in reply to ric maicle | On Thursday, 12 November 2015 at 15:06:26 UTC, ric maicle wrote:
> On Thursday, 12 November, 2015 07:50 PM, anonymous wrote:
>> __traits has special syntax. The first "argument" must be from a list of
>> special keywords that only have special meaning in that place. You can't
>> put the name of a struct there, and you can't put the special keyword
>> anywhere else. So there's no ambiguity, and you're not redefining
>> anything. Everything's fine.
>
> Thanks for clarifying __traits.
>
> On another thing. I'm wondering why the compiler didn't issue a warning
> on struct isPOD and byte isPOD? Isn't this called 'shadowing' or have I
> misunderstood the term?
If I remember correctly:
Shadowing globals is allowed, all other instances of shadowing are not.
|
Copyright © 1999-2021 by the D Language Foundation