www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4545] New: Alias to members possible without "this" instance

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

           Summary: Alias to members possible without "this" instance
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Keywords: accepts-invalid, spec
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: tomeksowi gmail.com


--- Comment #0 from Tomasz SowiƄski <tomeksowi gmail.com> 2010-08-01 07:56:10
PDT ---
I'm tearing up bug 4533 to have member-related alias problems in a separate
bug.

You can alias members from *outside*:

class A {
    void foo() {}
}

alias A.foo goo;

This compiles. It fails only if goo is called but should fail already at the
alias declaration.


Also, Andrej Mitrovic found a similar issue documented, but not implemented:

In the docs (http://www.digitalmars.com/d/2.0/declaration.html), there's this
code:

void main() {
    struct S { static int i; }
    S s;

    alias s.i a;    // illegal, s.i is an expression
    alias S.i b;    // ok
    b = 4;        // sets S.i to 4
}

But this [illegal expression] will compile.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 01 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545


Jacob Carlborg <doob me.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |doob me.com


--- Comment #1 from Jacob Carlborg <doob me.com> 2010-08-01 15:29:55 PDT ---
I think your first example should be legal because you can create a delegate
out of the alias and an instance of A.

void delegate () dg;
dg.ptr = new A;
dg.funcptr = &goo;
dg(); // this works

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 01 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545


Stewart Gordon <smjg iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg iname.com
            Version|D2                          |D1 & D2


--- Comment #2 from Stewart Gordon <smjg iname.com> 2010-08-07 05:31:59 PDT ---
I'm not sure.  The existence of .funcptr seems to contradict

http://www.digitalmars.com/d/1.0/type.html#delegates
"There are no pointers-to-members in D, but a more useful concept called
delegates are supported."

See also bug 2557.

Applies to D1 as well, though new A must be cast.  Moreover, you don't need to
go through an alias - DMD 1.062 accepts even
    dg.funcptr = &A.foo;

But non-static members of structs/classes/unions are still compile-time
entities, and they have properties.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 07 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545



--- Comment #3 from Jacob Carlborg <doob me.com> 2010-08-07 07:01:32 PDT ---
(In reply to comment #2)
 I'm not sure.  The existence of .funcptr seems to contradict
 
 http://www.digitalmars.com/d/1.0/type.html#delegates
 "There are no pointers-to-members in D, but a more useful concept called
 delegates are supported."
Just after that it says: "Delegates are an aggregate of two pieces of data: an object reference and a function pointer.". You must always have a pointer to a member, then you add a context and gets a delegate. How about static members, you can have pointers to those, regular function pointers. I don't know why the docs are written like that. Probably because the concept is a little different compared to C++'s member pointers. D's delegates are basically just syntax sugar for a C++'s member pointer and a instance of the same class.
 See also bug 2557.
 
 Applies to D1 as well, though new A must be cast.  Moreover, you don't need to
 go through an alias - DMD 1.062 accepts even
     dg.funcptr = &A.foo;
I used an alias because an alias was used in the first example.
 But non-static members of structs/classes/unions are still compile-time
 entities, and they have properties.
-- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 07 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545



--- Comment #4 from Stewart Gordon <smjg iname.com> 2010-08-07 07:21:22 PDT ---
(In reply to comment #3)
 (In reply to comment #2)
 I'm not sure.  The existence of .funcptr seems to contradict
 
 http://www.digitalmars.com/d/1.0/type.html#delegates
 "There are no pointers-to-members in D, but a more useful concept called
 delegates are supported."
Just after that it says: "Delegates are an aggregate of two pieces of data: an object reference and a function pointer.".
It really should say "a pointer to a non-static member function".
 You must always have a pointer to a
 member, then you add a context and gets a delegate. How about static members,
 you can have pointers to those, regular function pointers. I don't know why the
 docs are written like that. Probably because the concept is a little different
 compared to C++'s member pointers. D's delegates are basically just syntax
 sugar for a C++'s member pointer and a instance of the same class.
No, because delegate types don't care the least what class the function is a member of. This is why they're more useful - whatever is using the delegate need not know anything about the class, and so (for instance) a library can use a delegate just like a plain function pointer. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 07 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545



--- Comment #5 from github-bugzilla puremagic.com 2012-01-23 21:37:57 PST ---
Commit pushed to
https://github.com/D-Programming-Language/d-programming-language.org

https://github.com/D-Programming-Language/d-programming-language.org/commit/eedb99442ac037495ae12c3a7732aad72a074bf6
fix Issue 4545 - Alias to members possible without 'this' instance

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 23 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |FIXED


--- Comment #6 from Walter Bright <bugzilla digitalmars.com> 2012-01-23
21:38:52 PST ---
I'm not sure what to do with this. I did make some minor tweaks to the delegate
description. If more should be done, please be specific. I don't agree that the
behavoior Tomasz is reporting is a bug; it's expected.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 23 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545


Denis <verylonglogin.reg gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
                 CC|                            |verylonglogin.reg gmail.com
         Resolution|FIXED                       |


--- Comment #7 from Denis <verylonglogin.reg gmail.com> 2012-01-24 12:34:28 MSK
---
---
alias s.i a;    // illegal, s.i is an expression
---
is still in the docs and compilable.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
         Resolution|                            |INVALID


--- Comment #8 from Walter Bright <bugzilla digitalmars.com> 2012-01-24
01:42:22 PST ---
(In reply to comment #7)
 ---
 alias s.i a;    // illegal, s.i is an expression
 ---
 is still in the docs and compilable.
And it's not a bug. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545



--- Comment #9 from Denis <verylonglogin.reg gmail.com> 2012-01-24 13:07:34 MSK
---
(In reply to comment #8)
 (In reply to comment #7)
 ---
 alias s.i a;    // illegal, s.i is an expression
 ---
 is still in the docs and compilable.
And it's not a bug.
As I understood everywhere in `statement.dd` "illegal" means incorrect statement and it shouldn't be compilable. So "illegal" in `expression.dd` is expected to do so too. You reply means for me that those "illegal" statements doesn't compile with dmd but it is implementation specific and an other D compiler may compile them fine and it will result in undefined behavior. It will be a hell. Or am I mistaken somewhere? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |


--- Comment #10 from Walter Bright <bugzilla digitalmars.com> 2012-01-24
02:27:17 PST ---
My mistake. I should read more carefully.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 24 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4545


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
                 CC|                            |yebblies gmail.com
         Resolution|                            |DUPLICATE


--- Comment #11 from yebblies <yebblies gmail.com> 2012-01-31 14:19:14 EST ---
*** This issue has been marked as a duplicate of issue 4062 ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2012