Thread overview
Trouble reproducing compilation error
Aug 22, 2014
Xinok
Aug 22, 2014
Xinok
Aug 22, 2014
Marc Schütz
August 22, 2014
I'm currently receiving several errors when trying to compile this code with DMD 2.066 (beginning with RC1):

https://github.com/Xinok/XSort

The compiler throws an error because it's unable to deduce a type for the predicate in a few places. This repository compiles just fine in DMD 2.065 and earlier (more specifically, 2.066 beta 5 and earlier). I'm very certain that this is a bug given that I never experienced this issue before.

However, I'm finding it impossible to reproduce the bug so I can file a bug report. I'm not sure what exactly is causing it or if there's something specific in the context of this code that's triggering it. The only thing that I can deduce is that, in each case, an instance variable is being compared to an array element, e.g.:

    int[] arr = [10, 20, 30];
    int value = arr[0];
    pred(value, arr[1]); // Instance variable compared to array element

This one is stumping me and I could use some help in tracking down this bug.
August 22, 2014
This is the full compiler output:

combsort.d(90): Error: template D main.pred cannot deduce
function from argument
  types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(81): Error: template instance
combsort.combSortLinear!(pred, uint[])
  error instantiating
combsort.d(135): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
combsort.d(151): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(82): Error: template instance
combsort.combSortGallop!(pred, uint[])
  error instantiating
forwardsort.d(218): Error: template D main.pred cannot deduce
function from argu
ment types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
forwardsort.d(138): Error: template D main.pred cannot deduce
function from argu
ment types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
forwardsort.d(52): Error: template D main.pred cannot deduce
function from argum
ent types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(84): Error: template instance
forwardsort.forwardSort!(pred, uint[])
  error instantiating
heapsort.d(119): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
heapsort.d(102): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(99): Error: template instance
heapsort.heapSort!(pred, false, uint[]
) error instantiating
heapsort.d(119): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
heapsort.d(102): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(101): Error: template instance
heapsort.heapSort!(pred, true, uint[]
) error instantiating
heapsort.d(221): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(103): Error: template instance
heapsort.bottomUpHeapSort!(pred, fals
e, uint[]) error instantiating
heapsort.d(221): Error: template D main.pred cannot deduce
function from argumen
t types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(104): Error: template instance
heapsort.bottomUpHeapSort!(pred, true
, uint[]) error instantiating
insertionsort.d(45): Error: template D main.pred cannot deduce
function from arg
ument types !()(uint, uint), candidates are:
benchsort.d(37):        benchsort.main.pred(T)(T a, T b)
benchsort.d(108): Error: template instance
insertionsort.insertionSort!(pred, ui
nt[]) error instantiating
August 22, 2014
I used Vladimir's digger on your code, this is the output:

442708214b84093fd79b1d37c927c6ef5f1aeb99 is the first bad commit
commit 442708214b84093fd79b1d37c927c6ef5f1aeb99
Author: Walter Bright <walter@walterbright.com>
Date:   Wed Jul 23 03:59:13 2014 -0700

    dmd: Merge pull request #3801 from 9rnsr/fix13180

    https://github.com/D-Programming-Language/dmd/pull/3801

    [REG2.066a] Issue 13180 - AA get returns const(char[]) instead of string

:160000 160000 b4335c9d3eae1640d42e152894b2b9ec95d5828d a85f5d7aa43066e10db306f528c378786744e909 M	dmd

Vladimir noted in this PR that it introduced the following regression:
https://issues.dlang.org/show_bug.cgi?id=13294

I'm going to post a link to this discussion there.