Recursive templated structs disallowed?
Simen kjaeraas
simen.kjaras at gmail.com
Wed Aug 4 13:41:23 PDT 2010
Steven Schveighoffer <schveiguy at yahoo.com> wrote:
> On Wed, 04 Aug 2010 15:37:32 -0400, Simen kjaeraas
> <simen.kjaras at gmail.com> wrote:
>
>> struct bar( T ) {
>> auto baz( U )( U arg ) {
>> bar!( typeof( this ) ) tmp;
>> return tmp;
>> }
>> }
>>
>> void main( ) {
>> bar!int n;
>> n.baz( 3 );
>> }
>>
>> This code fails with
>> Error: recursive template expansion for template argument bar!(int)
>> Now, I agree it is recursive, but it is not infinitely recursive, so
>> there shouldn't really be a problem.
>> Is this a bug? Is there a workaround?
>
> It's lazily recursive. Meaning, it *is* infinitely recursive, but the
> compiler does not have to evaluate all the recursions until they are
> used.
>
> I'm not sure it should be disallowed, but it's definitely on the edge.
> Do you have some real-world case for this? If you want to get something
> like this fixed, you'll need a good example, not an academic one.
I sorta do. I have a struct that keeps track of the operations performed
on it, to create a template stack for calculating stuff at the end.
Basically, I build a function by performing the operations on the
struct. Not sure if this is an expression template, but possibly related.
--
Simen
More information about the Digitalmars-d-learn
mailing list