digitalmars.D.bugs - [Issue 351] New: Recursive string template doesn't work if the terminating specialisation is given first
- d-bugmail puremagic.com (68/68) Sep 16 2006 http://d.puremagic.com/issues/show_bug.cgi?id=351
- Thomas Kuehne (12/64) Sep 20 2006 -----BEGIN PGP SIGNED MESSAGE-----
- d-bugmail puremagic.com (9/9) Oct 10 2006 http://d.puremagic.com/issues/show_bug.cgi?id=351
http://d.puremagic.com/issues/show_bug.cgi?id=351
Summary: Recursive string template doesn't work if the
terminating specialisation is given first
Product: D
Version: 0.166
Platform: PC
OS/Version: Windows
Status: NEW
Keywords: rejects-valid
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: smjg iname.com
OtherBugsDependingO 340
nThis:
----------
import std.stdio;
template Reverse(char[] s: "") {
const char[] Reverse = "";
}
template Reverse(char[] s) {
const char[] Reverse = Reverse!(s[1..$]) ~ s[0];
}
void main() {
writefln(Reverse!("Recursive string template"));
}
----------
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string slice [1
.. 0] is out of bounds
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string slice [1
.. 0] is out of bounds
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): void has no
value
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): incompatible
types for ((Reverse!(""[1..0])) ~ (cast(int)(""[0]))): 'void' and 'int'
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): Can only
concatenate arrays, not (void ~ int)
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): cannot
implicitly convert expression (Reverse!(""[1..0]) ~ cast(int)(""[0])) of type
int to char[]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): template
instance string_template1.Reverse!("") error instantiating
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): template
instance string_template1.Reverse!("e") error instantiating
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0
is out of bounds [0 .. 0]
D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): template
instance string_template1.Reverse!("te") error instantiating
[and so on....]
----------
If the two definitions of template Reverse are swapped, then the code compiles
and runs correctly.
--
Sep 16 2006
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 d-bugmail puremagic.com schrieb am 2006-09-16:http://d.puremagic.com/issues/show_bug.cgi?id=351---------- import std.stdio; template Reverse(char[] s: "") { const char[] Reverse = ""; } template Reverse(char[] s) { const char[] Reverse = Reverse!(s[1..$]) ~ s[0]; } void main() { writefln(Reverse!("Recursive string template")); } ---------- D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string slice [1 .. 0] is out of bounds D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string slice [1 .. 0] is out of bounds D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): void has no value D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): incompatible types for ((Reverse!(""[1..0])) ~ (cast(int)(""[0]))): 'void' and 'int' D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): Can only concatenate arrays, not (void ~ int) D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): cannot implicitly convert expression (Reverse!(""[1..0]) ~ cast(int)(""[0])) of type int to char[] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): template instance string_template1.Reverse!("") error instantiating D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): template instance string_template1.Reverse!("e") error instantiating D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): string index 0 is out of bounds [0 .. 0] D:\My Documents\Programming\D\Tests\bugs\string_template1.d(8): template instance string_template1.Reverse!("te") error instantiating [and so on....] ---------- If the two definitions of template Reverse are swapped, then the code compiles and runs correctly.Added to DStress as http://dstress.kuehne.cn/compile/t/template_44_A.d http://dstress.kuehne.cn/compile/t/template_44_B.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFFEZkzLK5blCcjpWoRApT/AJ4uytg24UNRfmR6fO+mrVEx9eeF/ACfZ6+L 65qbqePX/9303yq/FqDmMMI= =wuy3 -----END PGP SIGNATURE-----
Sep 20 2006
http://d.puremagic.com/issues/show_bug.cgi?id=351
bugzilla digitalmars.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Fixed DMD 0.169
--
Oct 10 2006









Thomas Kuehne <thomas-dloop kuehne.cn> 