// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s // PR5290 int const f0(); void f0_test() { decltype(0, f0()) i = 0; i = 0; } struct A { int a[1]; A() { } }; typedef A const AC; int &f1(int*); float &f2(int const*); void test_f2() { float &fr = f2(AC().a); } template struct Future { explicit Future(T v); template auto call(F&& fn) -> decltype(fn(T())) { return fn(T()); } template auto then(F&& fn) -> decltype(call(fn)) { return fn(T()); } }; void rdar16527205() { Future f1(42); f1.call([](int){ return Future(0); }); } namespace pr10154 { class A{ A(decltype(nullptr) param); }; } template struct S {}; template auto f(T t) -> decltype(S(t)) { using U = decltype(S(t)); using U = S; return S(t); } struct B { B(decltype(undeclared)); // expected-error {{undeclared identifier}} }; struct C { C(decltype(undeclared; // expected-error {{undeclared identifier}} \ // expected-error {{expected ')'}} expected-note {{to match this '('}} }; namespace PR16529 { struct U {}; template struct S { static decltype(T{}, U{}) &f(); }; U &r = S::f(); } namespace PR18876 { struct A { ~A() = delete; }; // expected-note +{{here}} A f(); decltype(f()) *a; // ok, function call decltype(A()) *b; // expected-error {{attempt to use a deleted function}} decltype(0, f()) *c; // ok, function call on RHS of comma decltype(0, A()) *d; // expected-error {{attempt to use a deleted function}} decltype(f(), 0) *e; // expected-error {{attempt to use a deleted function}} } template class conditional { }; void foo(conditional) { // expected-note 2 {{to match this '('}} expected-error {{expected ')'}} } // expected-error {{expected function body after function declarator}} expected-error 2 {{expected '>'}} expected-error {{expected ')'}}