template<typename T, typename U>
struct has_nondeduced_pack_test {
static const bool value = false;
};
template<typename R, typename FirstType, typename ...Types>
struct has_nondeduced_pack_test<R(FirstType, Types..., int),
R(FirstType, Types...)> {
static const bool value = true;
};
int check_nondeduced_pack_test0[
has_nondeduced_pack_test<int(float, double, int),
int(float, double)>::value? -1 : 1];
template<typename ...T> void has_non_trailing_pack(T ..., int);
void (*ptr_has_non_trailing_pack)(char, int) = has_non_trailing_pack<char>;
template<typename ...T, typename U> void has_non_trailing_pack_and_more(T ..., U); void (*ptr_has_non_trailing_pack_and_more_1)(float, double, int) = &has_non_trailing_pack_and_more<float, double>;
void (*ptr_has_non_trailing_pack_and_more_2)(float, double, int) = &has_non_trailing_pack_and_more<float>;
namespace VariadicVsInitList {
template<typename T, typename ...> struct X { using type = typename T::error; };
template<typename ...T, typename X<int, T...>::type = 0> void f(T ...) = delete;
void f(long);
void f(long, long);
void f(long, long, long);
template<typename ...T> void g(T ...) = delete;
void h() {
f({0}); f({0}, {0}); f(1, {0}); f(1, {0}, 2);
g({0}); }
}