42 lines
915 B
C++
42 lines
915 B
C++
|
// { dg-options -std=c++0x }
|
||
|
// { dg-do run }
|
||
|
|
||
|
extern "C" void abort();
|
||
|
|
||
|
template <class T>
|
||
|
auto apply (T t) -> decltype (t())
|
||
|
{
|
||
|
return t();
|
||
|
}
|
||
|
|
||
|
template <class T>
|
||
|
T f(T t)
|
||
|
{
|
||
|
T t2 = t;
|
||
|
if (t != [=]()->T { return t; }())
|
||
|
abort ();
|
||
|
if (t != [=] { return t; }())
|
||
|
abort ();
|
||
|
if (t != [=] { return t2; }())
|
||
|
abort ();
|
||
|
if (t != [&] { return t; }())
|
||
|
abort ();
|
||
|
if (t != apply([=]{return t;}))
|
||
|
abort ();
|
||
|
|
||
|
int i;
|
||
|
[&] (int a) { return a+i+t; } (0);
|
||
|
[&] (int a) -> decltype(a) { return a+i+t; } (0);
|
||
|
[&] (int a) -> decltype(i) { return a+i+t; } (0);
|
||
|
[&] (int a) -> decltype(t) { return a+i+t; } (0);
|
||
|
[&] (int a) -> decltype(a+i) { return a+i+t; } (0);
|
||
|
[&] (int a) -> decltype(a+t) { return a+i+t; } (0);
|
||
|
[&] (int a) -> decltype(i+t) { return a+i+t; } (0);
|
||
|
[&] (int a) -> decltype(a+i+t) { return a+i+t; } (0);
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
f(0xbeef);
|
||
|
}
|