// RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify %s template auto fn0 = [] {}; template void foo0() { fn0(); } template auto fn1 = [](auto a) { return a + T(1); }; template auto v1 = [](int a = T()) { return a; }(); // expected-error@-1{{cannot initialize a parameter of type 'int' with an rvalue of type 'int *'}} // expected-note@-2{{in instantiation of default function argument expression for 'operator()' required here}} // expected-note@-3{{passing argument to parameter 'a' here}} struct S { template static constexpr T t = [](int f = T(7)){return f;}(); // expected-error{{constexpr variable 't' must be initialized by a constant expression}} expected-note{{cannot be used in a constant expression}} }; template int foo2() { X a = 0x61; fn1(a); (void)v1; (void)v1; // expected-note{{in instantiation of variable template specialization 'v1' requested here}} (void)S::t; // expected-note{{in instantiation of static data member 'S::t' requested here}} return 0; } template int foo3() { C::m1(); // expected-error{{type 'long long' cannot be used prior to '::' because it has no members}} return 1; } template auto v2 = [](int a = foo3()){}; // expected-note{{in instantiation of function template specialization 'foo3' requested here}} int main() { v2(); // This line causes foo3 to be instantiated. v2(2); // This line does not. foo2(); }