Bug 6854 – delegates does not work outside of object

Status
RESOLVED
Resolution
INVALID
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
Linux
Creation time
2011-10-25T16:30:00Z
Last change time
2011-10-25T20:11:42Z
Assigned to
nobody
Creator
tbolsh

Comments

Comment #0 by tbolsh — 2011-10-25T16:30:25Z
Dmd generate an error where it did not before (~2.032) and as far as I understand the language where it should not. dmd version: 2.055 OS Linux Here is the piece of code: ________________________________________________________________ #!/usr/bin/rdmd import std.datetime; alias bool delegate ( ) predicate; predicate wait_for_seconds( immutable uint seconds = 0 ){ immutable long start = SysTime.stdTime; return delegate (){ return seconds==0 ? true : ( (SysTime.stdTime - start) < seconds*10_000_000L ); }; } void main( string [] args ){ } ______________________________________________________________ here is what compiler tells: ./tst.d(8): Error: 'this' is only defined in non-static member functions, not __dgliteral1
Comment #1 by issues.dlang — 2011-10-25T16:51:29Z
That code is definitely wrong. stdTime is not a static function. It must be called on an object of type SysTime, not on the type itself. You probably want something more like this: import std.datetime; alias bool delegate ( ) predicate; predicate wait_for_seconds( immutable uint seconds = 0 ) { auto start = Clock.currTime(); return delegate () { return seconds == 0 ? true : Clock.currTime() - start < dur!"seconds"(seconds); }; } void main( string [] args ) { } though whether that does exactly what you want, I don't know (e.g. I would have that that you'd want to use >, not < given the function name, but your code has <). You might want to check out this article if you want know more about std.datetime beyond just reading the docs: http://d-programming-language.org/intro-to-datetime.html
Comment #2 by tbolsh — 2011-10-25T20:11:42Z
Sorry - you are 100% right - filed a bug too fast. really sorry.