klickverbot <s...@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

Reply via email to