Try this:
template digest(Hash) if(isDigest!Hash){
digestType!Hash digest(Range)(Range data) if(!is(Range:void[][]) &&
isInputRange!Range &&
__traits(compiles,digest!Hash(ElementType!(Range).init))){
//implementation detail
}
digestType!Hash digest()(scope const(void[])[] data...){ // templated
as a workaround
//implementation detail
}
// ... (maybe more overloads)
}
