blob: a1a3808afdcffdff36403533b93c3a7742bdbee2 [file] [log] [blame]
// 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>*;