Thread overview
Template crashes DMD 0.149
Mar 09, 2006
Kramer
Mar 10, 2006
Walter Bright
Mar 12, 2006
Brad Roberts
Mar 12, 2006
Kramer
March 09, 2006
Issues with the code that follows.

1) Both "if" statements in the foreach in main crash DMD.  They can be commented in any way as long as they're not commented together and they'll crash.

2) If you uncomment the "exists" function declaration (that is currently
commented) and comment the one below it, DMD will crash.

I could just be using templates incorrectly here, but in either case, it's a bug that DMD crashes.

I'm using Win2k, DMD 0.149.

:void main() {
:    char[][] result, test;
:
:    foreach (x; test) {
:        if (exists!(char[][], char[])(result, x) == true) {
:            return true;
:        }
:        if (exists(result, x) == true) {
:            return true;
:        }
:    }
:}

:template exists(T, U) {
:    //bool exists(T[][] src, U[] test) {
:    bool exists(T src, U test) {
:        foreach (x; src) {
:            if (x == test) {
:                return true;
:            }
:        }
:
:        return false;
:    }
:}

-Kramer


March 10, 2006
This problem appears to be another manifestation to a previous one I've got fixed now.


March 12, 2006
On Thu, 9 Mar 2006, Kramer wrote:

> Issues with the code that follows.
> 
> 1) Both "if" statements in the foreach in main crash DMD.  They can be commented in any way as long as they're not commented together and they'll crash.
> 
> 2) If you uncomment the "exists" function declaration (that is currently
> commented) and comment the one below it, DMD will crash.
> 
> I could just be using templates incorrectly here, but in either case, it's a bug that DMD crashes.
> 
> I'm using Win2k, DMD 0.149.
> 
> :void main() {
> :    char[][] result, test;
> :
> :    foreach (x; test) {
> :        if (exists!(char[][], char[])(result, x) == true) {
> :            return true;
> :        }
> :        if (exists(result, x) == true) {
> :            return true;
> :        }
> :    }
> :}
> 
> :template exists(T, U) {
> :    //bool exists(T[][] src, U[] test) {
> :    bool exists(T src, U test) {
> :        foreach (x; src) {
> :            if (x == test) {
> :                return true;
> :            }
> :        }
> :
> :        return false;
> :    }
> :}
> 
> -Kramer

filed as bug #38.
March 12, 2006
In article <Pine.LNX.4.64.0603121054590.30259@bellevue.puremagic.com>, Brad Roberts says...
>
>On Thu, 9 Mar 2006, Kramer wrote:
>
>> Issues with the code that follows.
>> 
>> 1) Both "if" statements in the foreach in main crash DMD.  They can be commented in any way as long as they're not commented together and they'll crash.
>> 
>> 2) If you uncomment the "exists" function declaration (that is currently
>> commented) and comment the one below it, DMD will crash.
>> 
>> I could just be using templates incorrectly here, but in either case, it's a bug that DMD crashes.
>> 
>> I'm using Win2k, DMD 0.149.
>> 
>> :void main() {
>> :    char[][] result, test;
>> :
>> :    foreach (x; test) {
>> :        if (exists!(char[][], char[])(result, x) == true) {
>> :            return true;
>> :        }
>> :        if (exists(result, x) == true) {
>> :            return true;
>> :        }
>> :    }
>> :}
>> 
>> :template exists(T, U) {
>> :    //bool exists(T[][] src, U[] test) {
>> :    bool exists(T src, U test) {
>> :        foreach (x; src) {
>> :            if (x == test) {
>> :                return true;
>> :            }
>> :        }
>> :
>> :        return false;
>> :    }
>> :}
>> 
>> -Kramer
>
>filed as bug #38.


Thanks Brad.  I'll be sure to use the bug tracker next time. :P