1*d644e021SAkira Hatanaka // RUN: %clang_cc1 -std=c++14 -emit-llvm -disable-llvm-optzns -verify %s
2*d644e021SAkira Hatanaka // expected-no-diagnostics
3*d644e021SAkira Hatanaka 
4*d644e021SAkira Hatanaka namespace PR28795 {
5*d644e021SAkira Hatanaka   template<typename T>
6*d644e021SAkira Hatanaka   void func() {
7*d644e021SAkira Hatanaka     enum class foo { a, b };
8*d644e021SAkira Hatanaka     auto bar = [](foo f = foo::a) { return f; };
9*d644e021SAkira Hatanaka     bar();
10*d644e021SAkira Hatanaka   }
11*d644e021SAkira Hatanaka 
12*d644e021SAkira Hatanaka   void foo() {
13*d644e021SAkira Hatanaka     func<int>();
14*d644e021SAkira Hatanaka   }
15*d644e021SAkira Hatanaka }
16*d644e021SAkira Hatanaka 
17*d644e021SAkira Hatanaka // Template struct case:
18*d644e021SAkira Hatanaka template <class T> struct class2 {
19*d644e021SAkira Hatanaka   void bar() {
20*d644e021SAkira Hatanaka     enum class foo { a, b };
21*d644e021SAkira Hatanaka     [](foo f = foo::a) { return f; }();
22*d644e021SAkira Hatanaka   }
23*d644e021SAkira Hatanaka };
24*d644e021SAkira Hatanaka 
25*d644e021SAkira Hatanaka template struct class2<int>;
26*d644e021SAkira Hatanaka 
27*d644e021SAkira Hatanaka template<typename T>
28*d644e021SAkira Hatanaka void f1() {
29*d644e021SAkira Hatanaka   enum class foo { a, b };
30*d644e021SAkira Hatanaka   struct S {
31*d644e021SAkira Hatanaka     int g1(foo n = foo::a);
32*d644e021SAkira Hatanaka   };
33*d644e021SAkira Hatanaka }
34*d644e021SAkira Hatanaka 
35*d644e021SAkira Hatanaka template void f1<int>();
36