Template parameter shadowing

F. Almeida francisco.m.almeida at gmail.com
Wed Sep 22 05:56:58 PDT 2010


== Quote from klickverbot (see at klickverbot.at)'s article
> 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.

It should not be allowed. The compiler should forbid using the same
symbol for distinct template parameters. I'm surprised if this even
compiles.


More information about the Digitalmars-d mailing list