(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
cpp1z/
class-deduction103.C
// PR c++/103672
// { dg-do compile { target c++17 } }

template<class T>
struct unique {
  template<class... Args>
  T* operator()(Args&&... args);
};

template<template<class...> class T, class... Args>
using deduced_type = decltype(T{Args{}...});

template<template<class> class F, template<class...> class T, class... Args>
auto make(Args&&... args) {
  return F<deduced_type<T, Args...>>{}(args...);
}

template<class A, class B>
struct Foo { Foo(A,B); };

using type = decltype(make<unique, Foo>(1, 2));
using type = Foo<int, int>*;