1 // PR c++/67130
2 // { dg-do compile { target c++14 } }
3 
4 namespace std {
5 template <typename> struct __success_type;
6 template <typename> void declval();
7 template <typename> class decay {
8 public:
9   typedef int type;
10 };
11 template <typename...> struct common_type;
12 struct A {
13   template <typename, typename _Up>
14   static __success_type<typename decay<decltype(declval<_Up>)>::type> _S_test;
15 };
16 template <typename _Tp, typename _Up> struct __common_type_impl : A {
17   typedef decltype(_S_test<_Tp, _Up>) type;
18 };
19 template <typename _Tp, typename _Up>
20 struct common_type<_Tp, _Up> : __common_type_impl<_Tp, _Up> {};
21 }
22 template <typename> struct B { struct _; };
23 template <typename T> typename B<T>::_ type;
24 template <template <typename...> class> struct C;
25 template <template <typename...> class f> C<f> metafunction;
26 template <typename T> struct B<T>::_ {};
27 namespace detail {
28 template <typename> struct _decltype;
29 }
30 template <template <typename...> class F> struct C {
31   template <typename... T>
32   auto operator()(T...)
33       -> decltype(type<typename F<detail::_decltype<T>...>::type>);
34 };
35 auto common_type = metafunction<std::common_type>(0, 0);
36