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)
}

Reply via email to