@@ -314,15 +314,17 @@ private template selectHandler(T, VISITORS...)
314314 template genericIndex (int i, int matched_index = - 1 ) {
315315 static if (i < VISITORS .length) {
316316 alias fun = VISITORS [i];
317- static if (! isSomeFunction! fun) {
318- static if (! __traits(isTemplate, fun)) enum genericIndex = " Visitor at index " ~ i.stringof ~ " is neither a function, nor a template." ;
319- else static if (__traits(compiles, fun! T) && isSomeFunction! (fun! T)) {
320- static if (ParameterTypeTuple! (fun! T).length == 1 ) {
321- static if (matched_index >= 0 ) enum genericIndex = " Only one generic visitor allowed" ;
322- else enum genericIndex = genericIndex! (i+ 1 , i);
323- } else enum genericIndex = " Generic visitor at index " ~ i.stringof~ " must have a single parameter." ;
324- } else enum genericIndex = genericIndex! (i+ 1 , i); // let this fail within the template instantiation instead of here
325- } else enum genericIndex = genericIndex! (i+ 1 , matched_index);
317+ static if (isSomeFunction! fun)
318+ enum genericIndex = genericIndex! (i+ 1 , matched_index);
319+ else static if (! __traits(isTemplate, fun))
320+ enum genericIndex = " Visitor at index " ~ i.stringof ~ " is neither a function, nor a template." ;
321+ else static if (! __traits(compiles, fun! T) || ! isSomeFunction! (fun! T))
322+ enum genericIndex = genericIndex! (i+ 1 , i); // let this fail within the template instantiation instead of here
323+ else static if (ParameterTypeTuple! (fun! T).length != 1 )
324+ enum genericIndex = " Generic visitor at index " ~ i.stringof~ " must have a single parameter." ;
325+ else static if (matched_index >= 0 )
326+ enum genericIndex = " Only one generic visitor allowed" ;
327+ else enum genericIndex = genericIndex! (i+ 1 , i);
326328 } else enum genericIndex = matched_index;
327329 }
328330
0 commit comments