xxxxxxxxxx
// eponymous template: infer pure
template sortImpl1(alias pred, R)
{
void sortImpl1(R arr)
{
pred(arr[0], arr[1]);
}
}
// non-eponymous template: failed to infer pure
template sortImpl2(alias pred, R)
{
void sort(R arr)
{
pred(arr[0], arr[1]);
}
}
void main() pure
{
int[] a = [1, 8, 3, 16];
sortImpl1!((a, b) => a < b, int[])(a);
sortImpl2!((a, b) => a < b, int[]).sort(a);
}