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

template<class T> struct A;

template<class T>
struct tuple {
  tuple(T);

  template<template<class> class Tmpl>
  tuple(Tmpl<T>);

  template<template<class> class Tmpl, typename A<Tmpl<char>>::type = 0>
  tuple(Tmpl<T>);

  template<template<class> class Tmpl, typename A<Tmpl<long>>::type = 0>
  tuple(Tmpl<T>);
};

template<class T> struct B { };

using ty1 = tuple<int>;
using ty1 = decltype(tuple(0));
using ty1 = decltype(tuple(B<int>{}));

#if __cpp_deduction_guides >= 201907
template<class T> using const_tuple = tuple<const T>;

using ty2 = const_tuple<int>;
using ty2 = decltype(const_tuple(0));
using ty2 = decltype(const_tuple(B<const int>{}));

using ty3 = const_tuple<B<int>>;
using ty3 = decltype(const_tuple(B<int>{}));
#endif