2015-03-04 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1y / lambda-generic-ice1.C
blob0e40e62b322dd034e7090d006b496d6b3c20adcb
1 // PR c++/64227
2 // { dg-do compile { target c++14 } }
4 template<typename T>
5 struct remove_reference
6 { typedef T   type; };
8 template<typename T>
9 struct remove_reference<T&>
10 { typedef T   type; };
12 template<typename T>
13 struct remove_reference<T&&>
14 { typedef T   type; };
16 template<typename T>
17 constexpr T&&
18 forward(typename remove_reference<T>::type& t) noexcept
19 { return static_cast<T&&>(t); }
21 template<typename T>
22 constexpr T&&
23 forward(typename remove_reference<T>::type&& t) noexcept
24 { return static_cast<T&&>(t); }
26 template<typename T>
27 auto greater_than(T&& t)
29   return [val = forward<T&&>(t)] (const auto& arg) { return arg > val; };
32 template<typename Functor>
33 void g(Functor f)
35   for (int i = 0; i < 100000; i++)
36     f(i);
39 int main()
41   g(greater_than(10));