/cp
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1y / lambda-generic-conv2.C
blob5528455fe0b167c375d71b7d3efb94a7f1d6bb84
1 // PR c++/71117
2 // { dg-do compile { target c++14 } }
4 template <class T> T&& declval() noexcept;
5 template <class, class>
6 constexpr bool is_same = false;
7 template <class T>
8 constexpr bool is_same<T, T> = true;
10 template <class F>
11 struct indirected : F {
12     indirected(F f) : F(f) {}
13     template <class I>
14     auto operator()(I i) -> decltype(declval<F&>()(*i)) {
15         return static_cast<F&>(*this)(*i);
16     }
19 int main() {
20     auto f = [](auto rng) {
21         static_assert(is_same<decltype(rng), int>, "");
22         return 42;
23     };
24     indirected<decltype(f)> i(f);
25     static_assert(is_same<decltype(i(declval<int*>())), int>, "");