Compilable Recursive Data Structure ( was: Recursive data structure using template won't compile)

Manfred Nowak svv1999 at hotmail.com
Thu Nov 8 17:17:09 PST 2012


Nick Sabalausky wrote:

> ALL 3 types have an exact, FINITE size.
> There *IS NO RECURSION* here.

This conclusion is wrong. Otherwise one can conclude that `s' is not 
recursing on itself in this code:

struct S{ S* next;}
S s;
s.next= &s;

... because `s' has a fixed and finite size.

One way to see the recursion in the problem given is to evaluate the 
exact types of the three entities starting with `(d_list!R).(node!
R)'---yes, `node' is templated implicitely---and yes, not starting 
names of types with upper case might confuse the senses.

Reaching `R' one might see, that
  `typeof( R)'
must be equal to
  `typeof( int x &( R x &( (d_list!R).(node!R))^2)^2 )'

where `T x U' is equívalent to put types `T' and `U' into a record,
      `&T' is an adress of some variabkle of type `T' and
      `T^2' is short hand for `T x T'.

If there is no such `R' for which this equality holds, then recursion 
is not avoidable.

Please guess what I believe.

-manfred

      
 
 



More information about the Digitalmars-d-learn mailing list