On Tuesday, 12 May 2020 at 20:36:22 UTC, Luis wrote:
I'm trying to make a SparseSet that on function of a optional
type parameter, could alongside the index set, store other
data. So I need a way to declare a optional type template
parameter.
A default argument of void is a common way to do it
template foo(T = void) {
static if(is(T == void)) { not given } else { use T }
}
// trying to use ZeroOrMore() gives error : struct
onlineapp.ZeroOrMore cannot deduce function from argument types
!()(), candidates are: onlineapp.d(12): ZeroOrMore(T = uint,
Types...)
Yeah, a template with default parameters must still be
instantiated, but you do not need to give the arguments. The ! is
a must though (or you could provide some alias but then it has a
separate name)