[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