1 // PR c++/78006
2 // { dg-do compile { target c++14 } }
3 
4 template<typename T> T&& declval() noexcept;
5 
6 template<typename... _Tp>
7   struct common_type;
8 
9 template<typename _Tp>
10   struct common_type<_Tp>
11   { typedef _Tp type; };
12 
13 template<typename _Tp, typename _Up>
14   struct common_type<_Tp, _Up>
15   { typedef decltype(true ? declval<_Tp>() : declval<_Up>()) type; };
16 
17 template<typename _Tp, typename _Up, typename... _Vp>
18   struct common_type<_Tp, _Up, _Vp...>
19   {
20     typedef typename
21       common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
22   };
23 
24 template<typename... _Tp>
25   using common_type_t = typename common_type<_Tp...>::type;
26 
27 template <typename... TFs>
28 auto x(TFs&&... fs)
29 {
30   using rt = common_type_t<decltype(fs(0))...>;
31   return [](auto) -> rt { };
32 }
33 
34 int main()
35 {
36   x([](int){})(0);
37 }
38