Date
2010-02-15.00:00:00
Message id
2559

Content

Proposed resolution (February, 2010):

Change 13.8.2 [temp.local] paragraph 8 as follows:

In the definition of a member of a class template that appears outside of the class template definition, the name of a member of this the class template hides the name of a template-parameter of any enclosing class templates (but not a template-parameter of the member, if the member is a class or function template). [Example:

  template<class T> struct A {
    struct B { /* ... */ };
    typedef void C;
    void f();
    template<class U> void g(U);
  };

  template<class B> void A<B>::f() {
    B b;   // A's B, not the template parameter
  }

  template<class B> template<class C> void A<B>::g(C) {
    B b;   // A's B, not the template parameter
    C c;   // the template parameter C, not A's C
  }