www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - cannot implicitly convert char[] to string

reply "vladde" <v vladde.net> writes:
I made a PR to phobos where I modified `std.format.format`. 
https://github.com/D-Programming-Language/phobos/pull/3528

However the auto builder fails, with the error message:
 runnable/test23.d(1219): Error: cannot implicitly convert 
 expression (format("s = %s", s)) of type char[] to string
The line which fails is `p = std.string.format("s = %s", s);` I don't understand why I can't convert a char[] to string.
Aug 15 2015
next sibling parent reply "cym13" <cpicard openmailbox.org> writes:
On Saturday, 15 August 2015 at 11:25:20 UTC, vladde wrote:
 I made a PR to phobos where I modified `std.format.format`. 
 https://github.com/D-Programming-Language/phobos/pull/3528

 However the auto builder fails, with the error message:
 runnable/test23.d(1219): Error: cannot implicitly convert 
 expression (format("s = %s", s)) of type char[] to string
The line which fails is `p = std.string.format("s = %s", s);` I don't understand why I can't convert a char[] to string.
I think it has to do with the fact that string is an alias to immutable(char)[] and you can't implicitely cast an immutable to a regular variable.
Aug 15 2015
parent reply "cym13" <cpicard openmailbox.org> writes:
On Saturday, 15 August 2015 at 11:34:01 UTC, cym13 wrote:
 On Saturday, 15 August 2015 at 11:25:20 UTC, vladde wrote:
 I made a PR to phobos where I modified `std.format.format`. 
 https://github.com/D-Programming-Language/phobos/pull/3528

 However the auto builder fails, with the error message:
 runnable/test23.d(1219): Error: cannot implicitly convert 
 expression (format("s = %s", s)) of type char[] to string
The line which fails is `p = std.string.format("s = %s", s);` I don't understand why I can't convert a char[] to string.
I think it has to do with the fact that string is an alias to immutable(char)[] and you can't implicitely cast an immutable to a regular variable.
I phrased it completely wrong, an example will be better : import std.stdio; void fun(immutable(int)[] i) { i.writeln(); } void main() { int[] i = [42]; fun(i); } Will not compile because there is no certainty that fun() won't change the array while the following will work import std.stdio; void fun(immutable(int)[] i) { i.writeln(); } void main() { int[] i = [42]; fun(i.dup); immutable(int)[] j = [42]; fun(j); immutable(int[]) k = [42]; fun(k); }
Aug 15 2015
parent =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
On 08/15/2015 04:45 AM, cym13 wrote:

 On Saturday, 15 August 2015 at 11:34:01 UTC, cym13 wrote:
 On Saturday, 15 August 2015 at 11:25:20 UTC, vladde wrote:
 I made a PR to phobos where I modified `std.format.format`.
 https://github.com/D-Programming-Language/phobos/pull/3528

 However the auto builder fails, with the error message:
 runnable/test23.d(1219): Error: cannot implicitly convert expression
 (format("s = %s", s)) of type char[] to string
The line which fails is `p = std.string.format("s = %s", s);` I don't understand why I can't convert a char[] to string.
I think it has to do with the fact that string is an alias to immutable(char)[] and you can't implicitely cast an immutable to a regular variable.
That's actually correct (for reference types). As long as there is no indirection, a value type can be casted implicitly: struct S { int i; } void main() { auto i = immutable(S)(); auto m = S(); m = i; // copied; fine }
 I phrased it completely wrong, an example will be better :

      import std.stdio;

      void fun(immutable(int)[] i) {
          i.writeln();
      }

      void main() {
          int[] i = [42];
          fun(i);
      }

 Will not compile because there is no certainty that fun() won't
 change the array
Actually, that's the job of 'const'. Here, it is not fun's ability to mutate but the caller's. 'immutable' on a function interface means a requirement: The caller *must* provide immutable data so that the function can rely on it not being changed by anyone. Ali
Aug 15 2015
prev sibling parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 08/15/2015 01:25 PM, vladde wrote:
 I made a PR to phobos where I modified `std.format.format`.
 https://github.com/D-Programming-Language/phobos/pull/3528

 However the auto builder fails, with the error message:
 runnable/test23.d(1219): Error: cannot implicitly convert expression
 (format("s = %s", s)) of type char[] to string
The line which fails is `p = std.string.format("s = %s", s);` I don't understand why I can't convert a char[] to string.
Get rid of the 'in' in format's signature.
Aug 15 2015
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 08/15/2015 01:54 PM, Timon Gehr wrote:
 On 08/15/2015 01:25 PM, vladde wrote:
 I made a PR to phobos where I modified `std.format.format`.
 https://github.com/D-Programming-Language/phobos/pull/3528

 However the auto builder fails, with the error message:
 runnable/test23.d(1219): Error: cannot implicitly convert expression
 (format("s = %s", s)) of type char[] to string
The line which fails is `p = std.string.format("s = %s", s);` I don't understand why I can't convert a char[] to string.
Get rid of the 'in' in format's signature.
Oh, I see, this is by design (which I don't like, but OK.) The reason the conversion does not go through is that format is not marked as pure.
Aug 15 2015