February 05, 2008 [Issue 1817] New: Creating a lazy tuple function with string literals fails | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=1817 Summary: Creating a lazy tuple function with string literals fails Product: D Version: 1.024 Platform: PC OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: schveiguy@yahoo.com I have a function like so, which prints out data only if a flag is true. This is used for logging: void printIfTrue(T ...)(bool flag, char[] formatStr, lazy T) { if(flag) writefln(formatStr, T); } However, the compiler complains on a line like: printIfTrue(true, "%s", "hello"); template instance printIfTrue!(char[5u]) error instantiating testlazyformat.d(34): Error: functions cannot return static array char[5u] I can understand this because it is trying to replace the type char[5u] with a delegate that returns char[5u]. However, the compiler could choose to return char[] instead of char[5u] (a slice), because there is no harm in taking the whole slice of a string literal, or even a slice of a char[5u] variable. This is a possible solution to the problem. As another solution, lazy evaluation could potentially be replaced with non-lazy evaluation for simple expressions, that is, expressions that are determined not to have any operations or effect any changes. For instance, lazy evaluation of a string literal could reduce to passing the string literal, as there is no reason to delay the evaluation for performance, and choosing not to evaluate it will not affect outside code. This would also reduce the amount of code as a delegate that returns the string literal is not generated. -- |
February 03, 2012 [Issue 1817] (D1 only) Lazy parameters cannot accept strings | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1817 yebblies <yebblies@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |rejects-valid CC| |yebblies@gmail.com Platform|x86 |All Version|1.024 |D1 Summary|Creating a lazy tuple |(D1 only) Lazy parameters |function with string |cannot accept strings |literals fails | Severity|normal |enhancement -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation