1f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith// RUN: %clang_cc1 -std=c++11 -verify %s
2f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith// RUN: %clang_cc1 -std=c++1y -verify %s
3f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith
4f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smithtemplate<typename T> struct S { typedef int type; };
5f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith
6f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smithtemplate<typename T> void f() {
7f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith  auto x = [] { return 0; } ();
8f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith  // FIXME: We should be able to produce a 'missing typename' diagnostic here.
9f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith  S<decltype(x)>::type n; // expected-error 2{{}}
10f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith}
11f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith
12f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith#if __cplusplus > 201103L
13f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smithtemplate<typename T> void g() {
14f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith  auto x = [] () -> auto { return 0; } ();
15f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith  S<decltype(x)>::type n; // expected-error 2{{}}
16f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith}
17f45c2992a3aac7591310cd824b7c7319afd432fcRichard Smith#endif
18