digitalmars.D.bugs - [Issue 1816] New: Parameter names not visible in return type in function declarations
- d-bugmail puremagic.com (23/23) Feb 04 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1816
- downs (7/37) Feb 05 2008 Here's a hack to work around that:
- d-bugmail puremagic.com (23/23) Feb 05 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1816
- d-bugmail puremagic.com (6/6) Mar 04 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1816
http://d.puremagic.com/issues/show_bug.cgi?id=1816 Summary: Parameter names not visible in return type in function declarations Product: D Version: unspecified Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: andrei metalanguage.com The following code should compile: typeof(a) identity(T)(T a) { return a; } void main() { auto x = identity(1); } In this case it's trivial to replace typeof(a) with T, but in the general case (e.g. mixins, complex expressions) it is necessary to access parameter names in complex expressions inside typeof(). --
Feb 04 2008
d-bugmail puremagic.com wrote:http://d.puremagic.com/issues/show_bug.cgi?id=1816 Summary: Parameter names not visible in return type in function declarations Product: D Version: unspecified Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: andrei metalanguage.com The following code should compile: typeof(a) identity(T)(T a) { return a; } void main() { auto x = identity(1); } In this case it's trivial to replace typeof(a) with T, but in the general case (e.g. mixins, complex expressions) it is necessary to access parameter names in complex expressions inside typeof().Here's a hack to work around that: either replace your parameter names with Init!(type) where Init == template Init(T) { T Init; } or use the return value of a delegate literal created on the spot. Example: typeof({ T a; return operationOnA(a); }) somefunc(T)(T a) { ... } I use that technique in scrapple.tools to say "if this string was our function body, what would its return type be?" It's fun! :D --downs
Feb 05 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1816 andrei metalanguage.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Thanks, downs, worked great. You forgot a pair of parens, so for others' reference here's the current implementation of binaryPred in std.functional: template binaryPred(string comp) { // BUG : typeof(mixin(comp)) should work typeof({ ElementType a, b; return mixin(comp);}()) binaryPred(ElementType)(ElementType a, ElementType b) { return mixin(comp); } } unittest { alias binaryPred!(q{a < b}) less; assert(less(1, 2) && !less(2, 1)); assert(less("1", "2") && !less("2", "1")); } --
Feb 05 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1816 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement --
Mar 04 2008