// PR c++/71105 // { dg-do compile { target c++14 } } template T declval(); template struct is_same { static constexpr bool value = false; }; template struct is_same { static constexpr bool value = true; }; template struct indirected : F { indirected(F f) : F(f) {} template auto operator()(I i) -> decltype(declval()(*i)) { return static_cast(*this)(*i); } }; int main() { auto f = [=](auto i) { return i + i; }; auto i = indirected{f}; static_assert(is_same())), int>::value, ""); }