[llvm-bugs] [Bug 39513] New: DR 458 not implemented?

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Nov 1 05:05:47 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=39513

            Bug ID: 39513
           Summary: DR 458 not implemented?
           Product: clang
           Version: 7.0
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: zilla at kayari.org
                CC: dgregor at apple.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

DR 458 https://wg21.link/cwg458 modified [temp.local] to clarify that names
from the enclosing class do not hide the template parameters of a member
template. Clang does not seem to follow that rule.

This is a modified version of the example in [temp.local] p7 (removing the
parameter of g for reasons):

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

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() {
  B b; // A's B, not the template parameter
  C c; // the template parameter C, not A's C
}


I get:

dr458.cc:14:5: error: variable has incomplete type 'A::C' (aka 'void')
  C c; // the template parameter C, not A's C
    ^
1 error generated.


Using:
clang version 7.0.0 (https://git.llvm.org/git/clang.git
1a4f56e161a5ab24aa022f7e8a754e71fa5347a1) (https://git.llvm.org/git/llvm.git
afb8c1fed21eb4848d86f2d28e9cb3afcfbb2656)

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20181101/54a6aefe/attachment.html>


More information about the llvm-bugs mailing list