В чем причина того, что в следующем примере экземпляр с тремя int работает со вторым шаблоном функции, но не с первым. Дополнительно: с типами State1/State1 он не работает.Ошибка рекурсивной вариации шаблонных шаблонов
struct State1{};
struct State2{};
#if 0
template<typename none = void>
constexpr void f()
{
}
template<typename First, typename... Rest>
constexpr void f()
{
f<Rest...>();
}
#else
template<typename none = void>
constexpr void f()
{
}
template<int First, int... Rest>
constexpr void f()
{
f<Rest...>();
}
#endif
void test()
{
f<1, 2, 3>();
// f<State1, State2>();
}
Благодарим за любые советы!
«Это не работает» не является проблемой. – melpomene
'1' не является типом, и наоборот. – krzaq
Один шаблон ожидает тип, вы его подаете целым литералом. В другом шаблоне ожидается целое число, которое вы подаете ему. Как вы удивлены, что это не работает? – DeiDei