decltype.cpp revision fa16125aaf667c2bd80efcea403a7a71aa65da14
1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s 2f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor 3f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor// PR5290 4f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregorint const f0(); 5f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregorvoid f0_test() { 635e12c90c1b107a75c5615aa76fdbd403661aaa6Douglas Gregor decltype(0, f0()) i = 0; 7f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor i = 0; 8f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor} 9f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor 10f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregorstruct A { int a[1]; A() { } }; 11f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregortypedef A const AC; 12f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregorint &f1(int*); 13f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregorfloat &f2(int const*); 14f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor 15f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregorvoid test_f2() { 16f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor float &fr = f2(AC().a); 17f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor} 18f801dcff43b49509bf758e213de56288bd3e2a2eDouglas Gregor 19e3d49b44ad0596b2998ecf2e7ca78d59188920e5Francois Pichetnamespace pr10154 { 20e3d49b44ad0596b2998ecf2e7ca78d59188920e5Francois Pichet class A{ 21e3d49b44ad0596b2998ecf2e7ca78d59188920e5Francois Pichet A(decltype(nullptr) param); 22e3d49b44ad0596b2998ecf2e7ca78d59188920e5Francois Pichet }; 23fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smith} 24fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smith 25fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smithtemplate<typename T> struct S {}; 26fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smithtemplate<typename T> auto f(T t) -> decltype(S<int>(t)) { 27fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smith using U = decltype(S<int>(t)); 28fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smith using U = S<int>; 29fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smith return S<int>(t); 30fa16125aaf667c2bd80efcea403a7a71aa65da14Richard Smith} 31