Mercurial > hg > CbC > CbC_llvm
comparison clang/test/SemaTemplate/typo-dependent-name.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify %s | |
2 | |
3 using nullptr_t = decltype(nullptr); | |
4 | |
5 template<typename T> | |
6 struct Base { | |
7 T inner; | |
8 }; | |
9 | |
10 int z; | |
11 | |
12 template<typename T> | |
13 struct X : Base<T> { | |
14 static int z; | |
15 | |
16 template<int U> | |
17 struct Inner { | |
18 }; | |
19 | |
20 bool f(T other) { | |
21 // A pair of comparisons; 'inner' is a dependent name so can't be assumed | |
22 // to be a template. | |
23 return this->inner < other > ::z; | |
24 } | |
25 }; | |
26 | |
27 void use_x(X<int> x) { x.f(0); } | |
28 | |
29 template<typename T> | |
30 struct Y { | |
31 static int z; | |
32 | |
33 template<int U> | |
34 struct Inner : Y { // expected-note {{declared here}} | |
35 }; | |
36 | |
37 bool f(T other) { | |
38 // We can determine that 'inner' does not exist at parse time, so can | |
39 // perform typo correction in this case. | |
40 return this->inner<other>::z; // expected-error {{no template named 'inner' in 'Y<T>'; did you mean 'Inner'?}} | |
41 } | |
42 }; | |
43 | |
44 struct Q { constexpr operator int() { return 0; } }; | |
45 void use_y(Y<Q> x) { x.f(Q()); } |