[Issue 14018] New: Treat CTFE-able functions as pure in CTFE-only contexts
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Jan 20 12:47:02 PST 2015
https://issues.dlang.org/show_bug.cgi?id=14018
Issue ID: 14018
Summary: Treat CTFE-able functions as pure in CTFE-only
contexts
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: verylonglogin.reg at gmail.com
If a function is executed during CTFE it's effectively `pure` for given
parameters. This enhancement proposes to treat a function as a `pure` one in
such contexts.
E.g. it will allow implicit conversion of a function result to `immutable`:
---
int g = 0;
int[] f(int i)
{
if(i)
++g;
return new int[1];
}
static immutable s1 = f(0); // OK
void main()
{
static immutable s2 = f(0); // OK
immutable s3 = f(0); // error, the context doesn't require CTFE
}
---
Pros:
Allow previously rejected but logically valid code to compile.
Cons:
Function return type is treated differently depending on a calling context
(CTFE or not) which complicates language type system.
--
More information about the Digitalmars-d-bugs
mailing list