D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 4246 - Delegate literals passed to variadic templates function incorrectly
Summary: Delegate literals passed to variadic templates function incorrectly
Status: RESOLVED DUPLICATE of issue 1350
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: Other Windows
: P3 normal
Assignee: No Owner
URL:
Keywords: wrong-code
Depends on:
Blocks:
 
Reported: 2010-05-28 14:17 UTC by Rob Jacques
Modified: 2015-06-09 05:11 UTC (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Rob Jacques 2010-05-28 14:17:47 UTC
I found this while playing with delegate literals and map. Thankfully, map and non-variadic templates don't compile with delegate literals, but this example does:

import std.stdio: writeln;
import std.range;
import std.algorithm;

template bar(fun...) {
    auto bar(int[] r) {
        return fun[0](r.front);
    }
}

void main(string[] args) {
    int[] x = [1,2,3,4,5];
    int y = 6;

    auto dg = (int t){ return t + y; };

    auto list  = bar!( dg )(x);
    auto list2 = bar!( (int t){ return t + y; } )(x);
    writeln(list,'\t',list2);

    return;
}

This prints out the correct value (7) when a delegate is passed in, but the delegate literal call results in a random printed number.
Comment 1 bearophile_hugs 2010-05-28 15:09:26 UTC
I think this used to work:


import std.algorithm;
void main() {
    auto arr = [1, 2, 3];
    auto xr1 = map!("a * a")(arr); // OK
    auto xr2 = map!((int x){ return x * x; })(arr); // ERR
    auto xr3 = map!((x){ return x * x; })(arr); // ERR
}
Comment 2 Don 2010-07-16 10:12:57 UTC
Reduced test case. Applies to D1 also, as far back as DMD0.175.  Not a regression.
-------------
int bug4246(fun...)() {
    return fun[0](7);
}

void main() {
    assert(  7 == bug4246!( (int t){ return t; } )()  );
}
Comment 3 Don 2010-07-16 10:14:07 UTC
*** Issue 4359 has been marked as a duplicate of this issue. ***
Comment 4 Don 2010-07-16 10:20:42 UTC

*** This issue has been marked as a duplicate of issue 1350 ***