Thread overview | |||||
---|---|---|---|---|---|
|
April 19, 2007 Templates with the same name as methods not legal? | ||||
---|---|---|---|---|
| ||||
If I try to call a template when a method with the same name exists I get a compiler error: template isInteger(T) { static if (is(T == int)) const bool isInteger = true; else const bool isInteger = false; } class Test { bool isInteger() { return isInteger!(int); // Yields an compiler error } } Gives me the error: test.d(15): template instance isInteger is not a template declaration, it is a function To me it seems this should be legal as my method doesn't take any template parameters and the compiler should understand that the template should be called.. There must be something I don't understand here... |
April 19, 2007 Re: Templates with the same name as methods not legal? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Haugen | Simen Haugen wrote:
> If I try to call a template when a method with the same name exists I get a compiler error:
>
> template isInteger(T)
> {
> static if (is(T == int))
> const bool isInteger = true;
> else
> const bool isInteger = false;
> }
>
> class Test
> {
> bool isInteger()
> {
> return isInteger!(int); // Yields an compiler error
> }
> }
>
> Gives me the error:
> test.d(15): template instance isInteger is not a template declaration, it is a function
Naming the member function "isInteger" hides the "isInteger" name for the template while inside the class. The method should "return .isInteger!(int);" instead (notice the added '.') to use the global isInteger template.
|
April 19, 2007 Re: Templates with the same name as methods not legal? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | I though the compiler could see the differance. Thanks. "Frits van Bommel" <fvbommel@REMwOVExCAPSs.nl> wrote in message news:f07lk7$29kv$1@digitalmars.com... > Simen Haugen wrote: >> If I try to call a template when a method with the same name exists I get a compiler error: >> >> template isInteger(T) >> { >> static if (is(T == int)) >> const bool isInteger = true; >> else >> const bool isInteger = false; >> } >> >> class Test >> { >> bool isInteger() >> { >> return isInteger!(int); // Yields an compiler error >> } >> } >> >> Gives me the error: >> test.d(15): template instance isInteger is not a template declaration, it >> is a function > > Naming the member function "isInteger" hides the "isInteger" name for the template while inside the class. The method should "return .isInteger!(int);" instead (notice the added '.') to use the global isInteger template. |
Copyright © 1999-2021 by the D Language Foundation