compute_duplicate((x,(y+1), array, array_length)==false) is calling compute_duplicate with one argument, the result of (x,(y+1), array, array_length)==false.
Did you mean (compute_duplicate(x,(y+1), array, array_length)==false) ?
(Just a slightly different arrangement of ()s but a very different piece of C++.