[Issue 3316] New: Functions nested in a pure templated function cannot reference its local variables
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Sep 13 16:17:31 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3316
Summary: Functions nested in a pure templated function cannot
reference its local variables
Product: D
Version: 2.032
Platform: Other
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: peng2cheng2 at yahoo.com
--- Comment #0 from pc <peng2cheng2 at yahoo.com> 2009-09-13 16:17:31 PDT ---
import std.stdio;
/*
ATTEMPT TO USE NESTED "PURE" FUNCTIONS IN A TEMPLATE.
All works fine unless you uncomment the third line in main. If you
do, dmd 2.032 yeilds:
pure.d(35): Error: pure nested function 'bar' cannot access mutable
data 'fooState'
pure.d(36): Error: pure nested function 'bar' cannot access mutable
data 'y'
pure.d(47): Error: template instance pure.fooPT!(char) error
instantiating
*/
//"pure" inner function, with concrete types - ok
pure string foo(string x, string y){
string fooState;
string bar(string x){
fooState = "hello ";
return x ~ y;
}
return fooState ~ bar(x);
}
//potentially pure (?) templated version not labled as pure - ok
immutable(T)[] fooT(T)(immutable(T)[] x, immutable(T)[] y){
immutable(T)[] fooState;
immutable(T)[] bar(immutable(T)[] x){
fooState = "hello ";
return x ~ y;
}
return fooState ~ bar(x);
}
//attempt to make templated version pure - no dice
pure immutable(T)[] fooPT(T)(immutable(T)[] x, immutable(T)[] y){
immutable(T)[] fooState;
immutable(T)[] bar(immutable(T)[] x){
fooState = "hello ";
return x ~ y;
}
return fooState ~ bar(x);
}
void main(){
writeln(foo("p", "c"));
writeln(fooT("p", "c"));
//writeln(fooPT("p", "c"));
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list