== Quote from klickverbot (s...@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.