[Issue 8329] foreach over string with dchar as element isn't nothrow

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Jun 30 22:19:47 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=8329



--- Comment #1 from Kenji Hara <k.hara.pg at gmail.com> 2012-06-30 22:22:23 PDT ---
(In reply to comment #0)
> This code fails to compile:
> 
> import std.stdio;
> 
> void main() nothrow
> {
>     foreach(dchar c; "hello world")
>     {}
> }
> 
> giving the error
> 
> q.d(5): Error: _aApplycd1 is not nothrow
> q.d(3): Error: function D main 'main' is nothrow yet may throw
> 
> if the dchar is removed, then it compiles just fine. Clearly, there's an issue
> with the apply function which implements iterating over strings as characters
> other than the character type of the string, since this really should be
> nothrow, but it's not.

I think it should not be nothrow. Iterating string(== immutable(char)[]) as a
range of dchar runs decoding of UTF-8, and if given string has invalid UTF-8
sequence, it should throw UnicodeException (it's declared in core.exception).

On the other hand, such a transcoding iteration should be pure and @safe. It's
enough worth.

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


More information about the Digitalmars-d-bugs mailing list