Hi
I am only learning D , but I am getting strange result.
A small part of the code:
switch( "df" ) //Line 64 - error when running
{
case "v ":
break;
case "vt":
break;
case "vn":
break;
case "f":
break;
}
Gives me this warning message:
warning - mesh.d(64): switch statement has no default
warning - mesh.d(64): statement is not reachable
and when I run it, I get:
Error: Switch Default mesh(64)
--------------------------
Although when I change it to:
switch( "df" )
{
case "v ":
break;
case "vt":
break;
case "vn":
break;
case "f":
break;
default:
}
- it doesn't give any warning or error message at all.
---------------
I tested it with the latest version 1.062
Is this really how it should be ?

I assume you mean version 0.162a? :) Actually, yes, this is expected behavior
--
although occasionally debated behavior. Let me try to explain.
In the first case you get two warnings. This first warning:

warning - mesh.d(64): switch statement has no default

This one is simple, and fairly obvious. Warning, you have no default clause
for your
switch. If this warning bothers you, add a default clause, even if it does
nothing at all
or just throws an exception.
The second warning:

warning - mesh.d(64): statement is not reachable

This is not neccessarily as obvious, but still true. You are switching on a
constant. As
well, all your cases are constants. None of your case constants match your
switch
constant -- information available to the compiler, since it does constant
folding and
analysis. So, you do have unreachable statements: every single one of your
case
statements is unreachable, because it is guaranteed not to match any of them.
It reports
line 64 because cases belong to their mother switch, I assume.
You got the following runtime error:

Error: Switch Default mesh(64)

Remember when I said you could write the default clause to just throw an
exception? DMD
automatically adds exactly such a default clause if you don't provide one. :)
This is
being thrown from that, since none of your cases will match. (This is why the
error
message is simply "Switch Default".)
Now then, in the second version of your code you have added a default clause.
This does
eradicate all the above behavior, because now you do have a default (the first
warning),
you do have a reachable clause in your switch statement (the default is,
afterall, always
reachable by principle), and DMD does not have to insert its automatic default
(which was
generating the runtime exception/error).
Make sense? :)
-- Chris Nicholson-Sauls