I am pretty sure this is a compiler bug. Nice find!
Edit: it is not a bug, as Quartermeister demonstrates; dynamic might implement a weird true
operator which might cause y
to never be initialized.
Here’s a minimal repro:
class Program
{
static bool M(out int x)
{
x = 123;
return true;
}
static int N(dynamic d)
{
int y;
if(d || M(out y))
y = 10;
return y;
}
}
I see no reason why that should be illegal; if you replace dynamic with bool it compiles just fine.
I’m actually meeting with the C# team tomorrow; I’ll mention it to them. Apologies for the error!