On 6/24/16 1:54 PM, Andrei Alexandrescu wrote:
On 6/24/16 1:15 PM, Steven Schveighoffer wrote:
The problem that hasn't been made clear is, why can't you just write:
static if(condition)
{
... // some code
return;
}
// some more code
And the answer is, I'm guessing, bug 14835 -- misguided "unreachable
statement" warnings.
Should we mark your bug as a duplicate?
Sorry, the problem is that the code doesn't compile at all if the static
if is false. So I need to insert the "else".
Even with this, I still didn't understand. Now with your example in the
bug report, it's clear. Reproducing here:
void fun(T)(T obj)
{
static if (!hasMember(T, "gun")) throw new Exception("No gun");
obj.gun;
}
Call with something that doesn't have a gun member, and even without the
reachability warnings (no -w switch), it doesn't compile. However, with
an else clause, it would compile.
The compiler should not attempt at all to compile the code after the
static if.
Right.
-Steve