www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - Bug? Are wchar[] and dchar[] treated differently?

reply Georg Wrede <georg nospam.org> writes:
Fedora Core 4 Linux, I compile this:

import std.stream;

void main()
{
          char[] c = "Saatana perkele"c;
         wchar[] w = "Saatana perkele"w;
         dchar[] d = "Saatana perkele"d;

         File of1 = new File;
         File of2 = new File;
         File of3 = new File;

         of1.create("/tmp/1.txt");
         of2.create("/tmp/2.txt");
         of3.create("/tmp/3.txt");

         of1.write(c);
         of1.write(w);
         of1.write(d);  // error line 19

         of2.write(w);
         of2.write(d);  // error line 22
         of2.write(c);

         of3.write(d);  // error line 25
         of3.write(c);
         of3.write(w);

         of1.close();
         of2.close();
         of3.close();
}

And I get the following compiler errors:

  $ dmd outtest2.d

outtest2.d(19): function std.stream.Stream.write (ubyte[])
                 does not match argument types (dchar[])
outtest2.d(19): cannot implicitly convert expression (d)
                 of type dchar[] to wchar[]
outtest2.d(22): function std.stream.Stream.write (ubyte[])
                 does not match argument types (dchar[])
outtest2.d(22): cannot implicitly convert expression (d)
                 of type dchar[] to wchar[]
outtest2.d(25): function std.stream.Stream.write (ubyte[])
                 does not match argument types (dchar[])
outtest2.d(25): cannot implicitly convert expression (d)
                 of type dchar[] to wchar[]

I would have expected complaints about maybe d and w, but not about d 
only. (And I would have wished no complaints at all, but that's not 
reasonable yet.)
Nov 17 2005
parent "Regan Heath" <regan netwin.co.nz> writes:
On Fri, 18 Nov 2005 08:51:41 +0200, Georg Wrede <georg nospam.org> wrote:
 Fedora Core 4 Linux, I compile this:

 import std.stream;

 void main()
 {
           char[] c = "Saatana perkele"c;
          wchar[] w = "Saatana perkele"w;
          dchar[] d = "Saatana perkele"d;

          File of1 = new File;
          File of2 = new File;
          File of3 = new File;

          of1.create("/tmp/1.txt");
          of2.create("/tmp/2.txt");
          of3.create("/tmp/3.txt");

          of1.write(c);
          of1.write(w);
          of1.write(d);  // error line 19

          of2.write(w);
          of2.write(d);  // error line 22
          of2.write(c);

          of3.write(d);  // error line 25
          of3.write(c);
          of3.write(w);

          of1.close();
          of2.close();
          of3.close();
 }

 And I get the following compiler errors:

   $ dmd outtest2.d

 outtest2.d(19): function std.stream.Stream.write (ubyte[])
                  does not match argument types (dchar[])
 outtest2.d(19): cannot implicitly convert expression (d)
                  of type dchar[] to wchar[]
 outtest2.d(22): function std.stream.Stream.write (ubyte[])
                  does not match argument types (dchar[])
 outtest2.d(22): cannot implicitly convert expression (d)
                  of type dchar[] to wchar[]
 outtest2.d(25): function std.stream.Stream.write (ubyte[])
                  does not match argument types (dchar[])
 outtest2.d(25): cannot implicitly convert expression (d)
                  of type dchar[] to wchar[]

 I would have expected complaints about maybe d and w, but not about d  
 only. (And I would have wished no complaints at all, but that's not  
 reasonable yet.)

It appears there is no overload for dchar[] in std.stream, I see: // writes a string, together with its length void write(char[] s) { write(s.length); writeString(s); } // writes a Unicode string, together with its length void write(wchar[] s) { write(s.length); writeStringW(s); } but no write method for dchar[]. There is no writeStringD or writeLineD either. Regan
Nov 17 2005