Why does the C# compiler reject returning a `ref` to a local variable, yet allow returning a `ref` into an element of an array parameter — what underlying lifetime/representation rule is being enforced?
ref int Bad() { int x = 5; return ref x; } // error
ref int Ok(int[] a) { return ref a[0]; } // fine