December 09, 2010 import inside a class overrides symbols imported in module scope? | ||||
---|---|---|---|---|
| ||||
It was quite hard to track that one down. In the following example the import statement was mixed into the class among other code so it wasn't as obvious as here. import std.traits; class Foo { import std.string; static assert(isNumeric!int); } foo.d(6): Error: template instance isNumeric is not a template declaration, it is a function foo.d(6): Error: static assert (isNumeric!(int)) is not evaluatable at compile time (There's an isNumeric function in std.string) Local variables override global ones, but is this correct as well? |
December 10, 2010 Re: import inside a class overrides symbols imported in module scope? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Trass3r | On 12/09/2010 10:53 PM, Trass3r wrote:
> It was quite hard to track that one down.
> In the following example the import statement was mixed into the class
> among other code so it wasn't as obvious as here.
>
> import std.traits;
> class Foo
> {
> import std.string;
> static assert(isNumeric!int);
> }
>
>
> foo.d(6): Error: template instance isNumeric is not a template
> declaration, it is a function
> foo.d(6): Error: static assert (isNumeric!(int)) is not evaluatable at
> compile time
>
> (There's an isNumeric function in std.string)
>
>
> Local variables override global ones, but is this correct as well?
You probably want to use static import when mixing stuff in, to avoid this accidental invasion of namespace.
|
Copyright © 1999-2021 by the D Language Foundation