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