================
@@ -186,3 +186,74 @@ class E {
 #endif
 template<typename T> using D = int; // expected-note {{declared here}} 
 E<D> ed; // expected-note {{instantiation of}}
+
+namespace non_functions {
+
+#if __cplusplus >= 201103L
+namespace PR88832 {
+template <typename T> struct O {
+  static const T v = 0;
+};
+
+struct P {
+  template <typename T> using I = typename O<T>::v; // #TypeAlias
+};
+
+struct Q {
+  template <typename T> int foo() {
+    return T::template I<int>; // expected-error {{'P::I' is expected to be a 
non-type template, but instantiated to a type alias template}}
+    // expected-note@#TypeAlias {{type alias template declared here}}
----------------
erichkeane wrote:

Yeah, it doesn't make sense for errors/warnings: Those should be "right next" 
to the thing that caused them (so I prefer the  +/- Numeral for those).  
However, with Notes, it makes a TON of sense, and IMO, should nearly ALWAYS be 
used.

Without them, we end up getting 'errors' and their notes are completely 
unintelligible, because they are spread out around the file and in no 
reasonable order.  It makes it so figuring out "this is an error only because 
of these instantiations" is impossible.

https://github.com/llvm/llvm-project/pull/89019
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to