To keep the template magic as deep in my code as possible I would like to use std::make_index_sequence as a default argument but this does not seem to compile and I don't quite understand why that is.
As an example take this case without default args, which compiles (Bare in mind this is a simplified example not my real use case):
#include <utility>
template <std::size_t... TIndicies>
std::size_t FunctNoDefaultArgs(std::index_sequence<TIndicies...>)
{
return (TIndicies + ... + 0);
}
int main()
{
return FunctNoDefaultArgs(std::make_index_sequence<5>{});
}
This works just fine.
So I wanted to move the std::make_index_sequence<5>{} to be a default argument and do the following:
#include <utility>
template <std::size_t... TIndicies>
std::size_t FunctDefaultArgs(std::index_sequence<TIndicies...> = std::make_index_sequence<5>{})
{
return (TIndicies + ... + 0);
}
int main()
{
return FunctDefaultArgs();
}
This does not compile in either MSVC, Clang or gcc. Could someone explain why?