// PR c++/102479 // { dg-do compile { target c++17 } } template struct A; template struct tuple { tuple(T); template class Tmpl> tuple(Tmpl); template class Tmpl, typename A>::type = 0> tuple(Tmpl); template class Tmpl, typename A>::type = 0> tuple(Tmpl); }; template struct B { }; using ty1 = tuple; using ty1 = decltype(tuple(0)); using ty1 = decltype(tuple(B{})); #if __cpp_deduction_guides >= 201907 template using const_tuple = tuple; using ty2 = const_tuple; using ty2 = decltype(const_tuple(0)); using ty2 = decltype(const_tuple(B{})); using ty3 = const_tuple>; using ty3 = decltype(const_tuple(B{})); #endif