111
|
1 // PR c++/58170
|
|
2 // { dg-require-effective-target c++11 }
|
|
3 // { dg-prune-output "not declared" }
|
|
4 // { dg-prune-output "expected" }
|
|
5
|
|
6 template <typename T, typename U>
|
|
7 struct base {
|
|
8 template <typename V>
|
|
9 struct derived;
|
|
10 };
|
|
11
|
|
12 template <typename T, typename U>
|
|
13 template <typename V>
|
|
14 struct base<T, U>::derived : public base<T, V> {
|
|
15 };
|
|
16
|
|
17 // This (wrong?) alias declaration provokes the crash.
|
|
18 template <typename T, typename U, typename V>
|
|
19 using alias = base<T, U>::derived<V>; // { dg-error "template|typename" }
|
|
20
|
|
21 // This one works:
|
|
22 // template <typename T, typename U, typename V>
|
|
23 // using alias = typename base<T, U>::template derived<V>;
|
|
24
|
|
25 template <typename T>
|
|
26 void f() {
|
|
27 alias<T, bool, char> m{};
|
|
28 (void) m;
|
|
29 }
|
|
30
|
|
31 int main() {
|
|
32 f<int>();
|
|
33 }
|