www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Circular reference error gone after inspecting members

reply Yuxuan Shui <yshuiv7 gmail.com> writes:
The offending code base is a little big and hard to reduce. I'll 
try if code is required, but here is the gist of the problem:

This snippet of code in my project:

     ...
     alias tmp = genCode!T;
     enum str = tmp.str; // This line here
     ...

Generate a circular reference error.

However, if I do:

     ...
     alias tmp = genCode!T;
     pragma(msg, __traits(allMembers, tmp));
     enum str = tmp.str; // This line here
     ...

Then the error is gone.

Anyone has any idea what could the problem be?
Aug 25 2018
parent reply rikki cattermole <rikki cattermole.co.nz> writes:
On 26/08/2018 2:10 AM, Yuxuan Shui wrote:
 The offending code base is a little big and hard to reduce. I'll try if 
 code is required, but here is the gist of the problem:
 
 This snippet of code in my project:
 
      ...
      alias tmp = genCode!T;
      enum str = tmp.str; // This line here
      ...
 
 Generate a circular reference error.
 
 However, if I do:
 
      ...
      alias tmp = genCode!T;
      pragma(msg, __traits(allMembers, tmp));
      enum str = tmp.str; // This line here
      ...
 
 Then the error is gone.
 
 Anyone has any idea what could the problem be?
If that pragma(msg) does indeed make it disappear (check -v to confirm), then its a bug.
Aug 25 2018
parent reply Yuxuan Shui <yshuiv7 gmail.com> writes:
On Saturday, 25 August 2018 at 14:13:18 UTC, rikki cattermole 
wrote:
 On 26/08/2018 2:10 AM, Yuxuan Shui wrote:
 The offending code base is a little big and hard to reduce. 
 I'll try if code is required, but here is the gist of the 
 problem:
 
 This snippet of code in my project:
 
      ...
      alias tmp = genCode!T;
      enum str = tmp.str; // This line here
      ...
 
 Generate a circular reference error.
 
 However, if I do:
 
      ...
      alias tmp = genCode!T;
      pragma(msg, __traits(allMembers, tmp));
      enum str = tmp.str; // This line here
      ...
 
 Then the error is gone.
 
 Anyone has any idea what could the problem be?
If that pragma(msg) does indeed make it disappear (check -v to confirm), then its a bug.
Alright then. I'll spend sometime and see if I can make a minimal example.
Aug 25 2018
parent Yuxuan Shui <yshuiv7 gmail.com> writes:
Issue filed: https://issues.dlang.org/show_bug.cgi?id=19190
Aug 25 2018