www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 6854] New: delegates does not work outside of object

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6854

           Summary: delegates does not work outside of object
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: tbolsh gmail.com



PDT ---
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:
________________________________________________________________


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

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 25 2011
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6854


Jonathan M Davis <jmdavisProg gmx.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |jmdavisProg gmx.com
         Resolution|                            |INVALID



PDT ---
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

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 25 2011
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6854




PDT ---
Sorry - you are 100% right - filed a bug too fast. really sorry.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 25 2011