[dmd-beta] D2 2.057 alpha

Dmitry Olshansky dmitry.olsh at gmail.com
Tue Dec 6 10:11:09 PST 2011


On 06.12.2011 21:01, Jacob Carlborg wrote:
> On 6 dec 2011, at 08:11, Dmitry Olshansky wrote:
>
>> On 06.12.2011 10:34, Nick Sabalausky wrote:
>>> From: "Nick Sabalausky"<bus_dmdbeta at semitwist.com>
>>>> In one of my programs I'm getting:
>>>>
>>>> D:\DevTool\dmd2beta\dmd2\windows\bin\..\..\src\phobos\std\regex.d(6576): Error: cannot implicitly convert expression (m) of type Captures!(string,uint) to RegexMatch!(string,ThompsonMatcher)
>>>>
>>>> Which isn't very helpful. I'm tracking down the code that's triggering it...
>>>>
>>>
>>> Test case:
>>>
>>> import std.regex;
>>> void main()
>>> {
>>>    std.regex.replace!(
>>>        (RegexMatch!string m) { return ""; }
>>>    )( "", regex("") );
>>> }
>>>
>> That's the breaking change, and there is no way out of it. This one should work:
>> std.regex.replace!(
>>        ( m) { return ""; }
>>    )( "", regex("") );
>>
>> or
>>
>> std.regex.replace!(
>>        (Captures!string m) { return ""; }
>>    )( "", regex("") );
>>
>> -- 
>> Dmitry Olshansky
>
> You cannot create an alias ?
>
It's more complicated then that. RegexMatch is full engine state, which 
I can't expose to user (because there are different types of them ). 
Also it's ineffective and is a leaky abstraction e.g. previously one can 
call popFront on it inside delegate (guess the result, especially since 
it was an aliased shallow copy of state).
The only thing that is meant to be exposed are captured matches, and 
they are inside separate Captures struct.

-- 
Dmitry Olshansky



More information about the dmd-beta mailing list