Template parameter shadowing

Simen kjaeraas simen.kjaras at gmail.com
Wed Sep 22 06:43:40 PDT 2010


klickverbot <see at klickverbot.at> wrote:

> In short, should the following be allowed?
>
> ---
> class Class(T) {
>    string foo(T)(T arg) {
>      return T.stringof;
>    }
>
>    string bar() {
>      return T.stringof;
>    }
> }
>
> unittest {
>    auto c = new Class!int;
>    assert(c.foo("asdf") == "string");
>    assert(c.bar() == "int");
> }
> ---
>
> Note that the T type parameter to the template function shadows the one  
> from the template class, which might be a source of confusion since T  
> refers to class template parameter in other member functions.

I believe this is acceptable in  the current spec, and as such would be
an enhancement request (local symbols are allowed to shadow global).

That said, I believe it is worthy of inclusion, as one much more rarely
wants to shadow template parameters.

-- 
Simen


More information about the Digitalmars-d mailing list