digitalmars.D.learn - defect when using 'alias this' in a struct?
- Kieron Brown (32/32) Aug 30 2010 I have used alias this and found odd behaviour in complex code.
- Steven Schveighoffer (4/35) Aug 30 2010 Yes, that's a bug.
I have used alias this and found odd behaviour in complex code.
I tracked the problem down and was able to replicate it
with a much simpler case as given below.
I'm new to D (but have read TDPL).
Is this my mis-understanding or a defect?
Many thanks, Kieron
----- self contained d sample starts -----
import std.stdio, std.math;
void main()
{
    auto p = Test(0.5, 0.5);
    assert(0.5 == p.a); // ok
    assert(0.5 == p.b); // ok
    Test q;
//  q = Test(0.5, 0.5);
    //
    // the above line gave same
    // error when subst for
    // the line below
    q = p;
    if (isNaN(q.b))
        printf("problem replicated\n");
    assert(0.5 == q.a); // ok
    assert(0.5 == q.b); // this fails
}
struct Test
{
    double a;
    double b;
    alias a this;
}
----- end of file -----
 Aug 30 2010
On Mon, 30 Aug 2010 13:12:00 -0400, Kieron Brown  
<kieron_brown hotmail.com> wrote:
 I have used alias this and found odd behaviour in complex code.
 I tracked the problem down and was able to replicate it
 with a much simpler case as given below.
 I'm new to D (but have read TDPL).
 Is this my mis-understanding or a defect?
 Many thanks, Kieron
 ----- self contained d sample starts -----
 import std.stdio, std.math;
 void main()
 {
     auto p = Test(0.5, 0.5);
     assert(0.5 == p.a); // ok
     assert(0.5 == p.b); // ok
     Test q;
 //  q = Test(0.5, 0.5);
     //
     // the above line gave same
     // error when subst for
     // the line below
     q = p;
     if (isNaN(q.b))
         printf("problem replicated\n");
     assert(0.5 == q.a); // ok
     assert(0.5 == q.b); // this fails
 }
 struct Test
 {
     double a;
     double b;
     alias a this;
 }
Yes, that's a bug.
-Steve
 Aug 30 2010








 
  
  
  "Steven Schveighoffer" <schveiguy yahoo.com>
 "Steven Schveighoffer" <schveiguy yahoo.com>