sammccall accepted this revision.
sammccall added inline comments.

================
Comment at: clang/test/SemaCXX/base-class-ambiguity-check.cpp:15
+  // Should not crash on an incomplete-type and dependent base specifier.
+  struct Derived : Base1, Base2 {}; // expected-error {{implicit instantiation 
of undefined member 'Foo2<int>::Base1'}} \
+                                       expected-error {{implicit instantiation 
of undefined member 'Foo2<int>::Base2'}}
----------------
hokein wrote:
> The diagnostic is suboptimal (I'd expect it is "invalid use of incomplete 
> type"), but it is not regression, clang shows the same diagnostics for the 
> following non-crash case:
> 
> ```
> template <typename T> struct Foo2 {
>   struct Base1;
>   struct Derived : Base1 {};
> }
> ```
Or even
```
template <int> struct X;
X<42> y;
```

I think the diagnostic is OK - it's diagnosing why the type *is* incomplete, 
rather than why the type *may not* be complete.

Typical use of this pattern would be to provide an out-of-line definition 
template:

```
template <typename T> struct Foo2<T>::Base1 {
  T contents;
}
```

in which case instantiation is the right idea.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113474/new/

https://reviews.llvm.org/D113474

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to