template<typename ...Ts> void PackInsideTypedefDeclaration() {
([] {
typedef Ts Type;
(void)Type();
}(), ...);
}
template void PackInsideTypedefDeclaration<>();
template void PackInsideTypedefDeclaration<int>();
template void PackInsideTypedefDeclaration<int, float>();
template<typename ...Ts> void PackInsideTypedefDeclarationInvalid() {
[] { typedef Ts Type;
(void)Type();
};
([] {
typedef Ts Type;
f(Type()...); }, ...);
}
template<typename ...Ts> void PackInsideAliasDeclaration() {
([] {
using Type = Ts;
(void)Type();
}(), ...);
}
template void PackInsideAliasDeclaration<>();
template void PackInsideAliasDeclaration<int>();
template void PackInsideAliasDeclaration<int, float>();
template<typename ...Ts> void PackInsideAliasDeclarationInvalid() {
[] { using Type = Ts;
(void)Type();
};
([] {
using Type = Ts;
f(Type()...); }, ...);
}
template<typename ...Ts> void PackInsideUsingDeclaration() {
([] {
struct A {
using Type = Ts;
};
struct B : A {
using typename A::Type;
};
(void)typename B::Type();
}(), ...);
}
template void PackInsideUsingDeclaration<>();
template void PackInsideUsingDeclaration<int>();
template void PackInsideUsingDeclaration<int, float>();
template<typename ...Ts> void PackInsideUsingDeclarationInvalid() {
([] {
struct A {
using Type = Ts;
};
struct B : A {
using typename A::Type...; };
}(), ...);
}
template<typename ...Ts> void PackInsideVarDeclaration() {
([] {
Ts ts;
(void)ts;
}, ...);
}
template void PackInsideVarDeclaration<>();
template void PackInsideVarDeclaration<int>();
template void PackInsideVarDeclaration<int, float>();
template<typename ...Ts> void PackInsideVarDeclarationInvalid() {
[] { Ts ts;
(void)ts;
};
}
template<typename ...Ts> void PackInsideFunctionDeclaration() {
([] {
Ts ts(Ts);
ts({});
}, ...);
}
template void PackInsideFunctionDeclaration<>();
template void PackInsideFunctionDeclaration<int>();
template void PackInsideFunctionDeclaration<int, float>();
template<typename ...Ts> void PackInsideFunctionDeclarationInvalid() {
[] { Ts ts(Ts);
ts({});
};
}
template<typename ...Ts> void PackInsideLocalClass() {
([] {
class Local {
Ts ts;
};
Local l;
}, ...);
}
template void PackInsideLocalClass<>();
template void PackInsideLocalClass<int>();
template void PackInsideLocalClass<int, float>();
template<typename ...Ts> void PackInsideLocalClassInvalid() {
[] { class Local {
Ts ts;
};
Local l;
};
}
template<typename T> using Int = int;
struct AClass {};
template<typename T> using Class = AClass;
template<typename ...Ts> void HiddenPack() {
(Int<Ts>(), ...);
(Int<Ts>{}, ...);
(Class<Ts>(), ...);
(Class<Ts>{}, ...);
([] {
Int<Ts>();
}, ...);
([] {
Int<Ts>{};
}, ...);
([] {
Class<Ts>();
}, ...);
([] {
Class<Ts>{};
}, ...);
}
template void HiddenPack<>();
template void HiddenPack<int>();
template void HiddenPack<int, float>();
template<typename ...Ts> void HiddenPackInvalid() {
Int<Ts>(); Int<Ts>{}; Class<Ts>(); Class<Ts>{}; }