http://d.puremagic.com/issues/show_bug.cgi?id=9949
Andrej Mitrovic <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #1 from Andrej Mitrovic <[email protected]> 2013-04-18 05:23:37 PDT --- (In reply to comment #0) > The following code compiles aldo s is not readable at compile time: > > struct S (alias T) { > typeof(T) value; > } > > void main () { > auto s = "some"; > s ~= "string"; > S!s value; > } That code isn't reading 's', it is only using it to get its type. And all types are known at compile-time. The code is ok. > > > The side effect of this is the following error: > > // Error: function literal __lambda3 (S!(s) a) is not > // callable using argument types (S!(s)) > > module program; > > import std.stdio; > > struct S (alias T) { > typeof(T) value; > } > > void f (alias l = x => 1) (string s) { > l(S!(s).init); > } > > void main () { > auto s = "some"; > s ~= "string"; > f!((S!s a) { return 1; })(s); > } It doesn't compile because 's' within 'main' and 's' within 'f' are two different variables. You'd have to pass 's' from within main as an alias parameter to 'f'. E.g.: ---- import std.stdio; struct S(alias T) { typeof(T) value; } void f(alias lambda = x => 1, alias str)() { lambda(S!str.init); } void main() { string str = "some"; f!((S!str a) { return 1; }, str)(); } ---- But I'd recommend changing the struct S definition to take a type and use typeof() at the call site to avoid having to use aliases everywhere. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
