[Issue 24572] New: [REG 2.108.0] Faulty template instantiation with lambda expressions
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue May 28 12:02:57 UTC 2024
https://issues.dlang.org/show_bug.cgi?id=24572
Issue ID: 24572
Summary: [REG 2.108.0] Faulty template instantiation with
lambda expressions
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: regression
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: zan77137 at nifty.com
There appears to be a regression in the D language compiler between versions
2.107.1 and 2.108.0.
This code has broken since dmd 2.108.0:
----------------
import std;
template isCallableWith(alias F, Args...)
{
enum bool isCallableWith = __traits(compiles, isCallable!(F!Args));
}
class A
{
void foo(int dat) { }
void bar()
{
alias lambda1 = (dat) => foo(dat);
pragma(msg, isCallable!(lambda1!int)); // true
pragma(msg, isCallableWith!(lambda1, int)); // true
alias lambda2 = (dat) => foo(dat);
//pragma(msg, isCallable!(lambda2!int));
// 2.107.1 -> true / 2.108.0 -> false
pragma(msg, isCallableWith!(lambda2, int));
}
}
void main()
{
}
----------------
Actual Behavior:
In version 2.107.1, isCallableWith!(lambda2, int) returns true.
In version 2.108.0, isCallableWith!(lambda2, int) returns false.
Expected Behavior:
isCallableWith!(lambda2, int) should return true, consistent with the behavior
observed in version 2.107.1.
--
More information about the Digitalmars-d-bugs
mailing list