I'm trying to figure out why the compiler has a problem with this function. It gives me the "Not all code paths return a value" error, however I cannot see a situation where control-flow would pass to the if( a ) expression without a being true (so the if( a ) is superfluous, but the compiler doesn't seem to recognize that).
public static Boolean Foo(Boolean x)
{
Boolean a = false;
if( x )
{
a = true;
}
else
{
try
{
SomethingThatMightThrow();
Assert.IsFalse( a );
return a;
}
catch(Exception)
{
a = true;
}
}
if( a )
{
return x;
}
}
The immediate fix is to simply remove the if( a ) guard statement completely and just return x immediately - but why does the compiler complain even though it should be able to statically prove all possible code paths will hit a return statement? Crucially, there are no loops, which are often the main reason for it failing to prove return-ness.
I'm using VS2015 Update 3.