Bug 1820 – Let ifti see through static if condition in some cases

Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2008-02-07T17:11:17Z
Last change time
2020-03-21T03:56:36Z
Keywords
rejects-valid
Assigned to
No Owner
Creator
Andrei Alexandrescu

Comments

Comment #0 by andrei — 2008-02-07T17:11:17Z
The following code compiles and runs as expected: import std.stdio; template wyda(string pred = ``) { void wyda(int x) { writeln(pred, " ", x); } } void main() { wyda(3); wyda!("a")(4); } However, the following equivalent code does not: import std.stdio; template wyda(string pred = ``) { static if (true) void wyda(int x) { writeln(pred, " ", x); } } void main() { wyda(3); wyda!("a")(4); } The proposed solution is to get rid to the maximum extent possible of the requirements for the noisy "!()" syntax. If a template name is specified without the "!", then it should simply assume "!()" followed. Andrei
Comment #1 by yebblies — 2011-07-02T21:28:33Z
The issue here is in: template func(T) { static if (cond) void func(T x) {} } func is only a function template (onemember) when cond is true, and in the general case cond may rely on T, which relies on ifti. The following might illustrate it better: template func(T) { static if (is(T == int)) // how could we know this before performing ifti? void func(T* x) {} } The compiler cannot generally evaluate static if conditions without the template args being known. Although it could in very simple cases, I'm not sure it's worth the effort. One place I think this could be done is inside VersionConditions.
Comment #2 by simen.kjaras — 2017-09-19T11:50:41Z
Code in this issue compiles and runs correctly on 2.075.1.