Reader Andy Neilson writes in with another bug:

The current compiler implementation has some problems. If the variable is a field of this, then the compiler will die. For example:

class MyClass {
public:
  int i;

  void Foo() {
    array<int>^ x = {1, 2, 3};

    for each (i in x) {
      if (i == 2) break;
    } 
  }
};

This is also a bug.  I'll file it in our bug tracking database.  I'm not sure what the design decision will be; it feels like we should disallow the construct you show - but I'm not certain.  I found a "sort-of" workaround; you can use a tracking reference to an integer to do it, such as:

void Foo() {
  array<int>^ x = {1, 2, 3};
  int% a = i;
  for each (a in x) {
    ...
  }
}

Thanks for the bug report!