November 09, 2013
https://d.puremagic.com/issues/show_bug.cgi?id=8709


Denis Shelomovskij <verylonglogin.reg@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |rejects-valid
             Status|NEW                         |RESOLVED
                 CC|                            |verylonglogin.reg@gmail.com
          Component|DMD                         |Phobos
         Resolution|                            |WORKSFORME


--- Comment #5 from Denis Shelomovskij <verylonglogin.reg@gmail.com> 2013-11-09 12:52:12 MSK ---
(In reply to comment #1)
> Reduced test case:

It is not a reduced testcase. See below.

> struct S
> {
>     alias value this;
>     string value;
> }
> 
> void main ()
> {
>   auto s = S("hello");
>   char[] arr = "world".dup;
>   s = cast(S)"other";
>   s = cast(S)arr;
> }
> 
> The cast from string to S works, but the cast from char[] to S does not, in spite of the fact that their only difference is constness.

`alias this` has nothing to do with casting to type and it is just rewritten to `S(...)` and  as `char[]` isn't implicitly convertible to `string` it fails. So the behavior is correct.

> However, the fact that this came up with std.string.toLower just highlights how error-prone it is to use alias this with templated functions. It's insanely easy to have template constraints which pass just fine due to the presense of alias this but then fail to actually compile or which behave bizarrely due to when conversions do and don't happen. I don't know what the solution to that is though.

Agree.

So the issue is Phobos one, not dmd one. And `toLower` works now.

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------