struct A {
A(...); A(int = 0, int = 0, int = 0, int = 0, ...); A(int = 0, int = 0, ...);
template<typename T> A(T, int = 0, ...);
template<typename T, int N> A(const T (&)[N]); template<typename T, int N> A(const T (&)[N], int = 0); };
struct B : A { using A::A; B(void*);
};
struct C {} c;
A a0{}; B b0{};
A a1{1}; B b1{1};
A a2{1,2}; B b2{1,2};
A a3{1,2,3}; B b3{1,2,3};
A a4{1,2,3,4}; B b4{1,2,3,4};
A a5{1,2,3,4,5}; B b5{1,2,3,4,5};
A a6{c}; B b6{c};
A a7{c,0}; B b7{c,0};
A a8{c,0,1}; B b8{c,0,1};
A a9{"foo"}; B b9{"foo"};
namespace PR15755 {
struct X {
template<typename...Ts> X(int, Ts...);
};
struct Y : X {
using X::X;
};
struct Z : Y {
using Y::Y;
};
Z z(0);
}