aboutsummaryrefslogtreecommitdiff
path: root/test/SemaTemplate/ms-lookup-template-base-classes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaTemplate/ms-lookup-template-base-classes.cpp')
-rw-r--r--test/SemaTemplate/ms-lookup-template-base-classes.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/SemaTemplate/ms-lookup-template-base-classes.cpp b/test/SemaTemplate/ms-lookup-template-base-classes.cpp
index 62451081c3bc..9fa59e626ee7 100644
--- a/test/SemaTemplate/ms-lookup-template-base-classes.cpp
+++ b/test/SemaTemplate/ms-lookup-template-base-classes.cpp
@@ -547,3 +547,29 @@ struct E : D<T>
XXX x; // expected-error {{unknown type name}}
};
}
+
+namespace PR23810 {
+void f(int);
+struct Base {
+ void f(); // expected-note{{must qualify identifier to find this declaration in dependent base class}}
+};
+template <typename T> struct Template : T {
+ void member() {
+ f(); // expected-warning {{found via unqualified lookup into dependent bases}}
+ }
+};
+void test() {
+ Template<Base> x;
+ x.member(); // expected-note{{requested here}}
+};
+}
+
+namespace PR23823 {
+// Don't delay lookup in SFINAE context.
+template <typename T> decltype(g(T())) check(); // expected-note{{candidate template ignored: substitution failure [with T = int]: use of undeclared identifier 'g'}}
+decltype(check<int>()) x; // expected-error{{no matching function for call to 'check'}}
+
+void h();
+template <typename T> decltype(h(T())) check2(); // expected-note{{candidate template ignored: substitution failure [with T = int]: no matching function for call to 'h'}}
+decltype(check2<int>()) y; // expected-error{{no matching function for call to 'check2'}}
+}