foreach (x; a .. b) and foreach_reverse (x; a .. b) should be disallowed
grauzone
none at example.net
Sun May 17 22:06:19 PDT 2009
Robert Fraser wrote:
> Jason House wrote:
>> Andrei Alexandrescu Wrote:
>>
>>> Consider:
>>>
>>> foreach (x; 1.0 .. 4.1) writeln(x);
>>> foreach_reverse (x; 1.0 .. 4.1) writeln(x);
>>>
>>> This sucks. foreach with interval for floating-point types should be
>>> disallowed.
>>>
>>>
>>> Andrei
>>
>> I agree that makes little sense.
>>
>> I'm curious, why the sudden pruning of features? Can you please
>> consider removing SFINAE? I'd also love to see is expressions go the
>> way of the dinosaur. I don't know what their replacement should look
>> like, but there _has_ to be a better and less error prone syntax!
>
> I agree about SFINAE, but what's so bad about is()? If it does get
> removed, I hope whatever replaces it can do all the weird things is can
> (e.x. is(typeof({}())))
Isn't is() also a kind of SFINAE? SFINAE is Substitution Failure Is Not
An Error (or so). That means, if there's an error trying to apply a
template, the error is silently ignored, and the compiler tries the next
template declaration. (Correct me if I'm wrong.) is() does something
similar: it tries to compile the expression inside is(), and if it
fails, the compiler silently ignores the error and returns "false" to
the if.
The problem is: you can't really know if that what you intended to test
with is() was false, or if another random semantic error happened inside
the is() expression.
Look at this for example:
> writefln("%s", is(typeof(rtzx) == char));
This compiles even if rtzx doesn't exist. But you probably wanted to
check the type of rtzx, not it if rtzx exists. If you mistyped rtzx, the
compiler will never tell you.
Now Andrei didn't really explain his problem with is()...
More information about the Digitalmars-d
mailing list