Here. “Of course, the flexibility and expressiveness of C++ that allowed this kind of thing to be built at the library level, instead of directly into the language itself, was both its best feature and its worst problem. C# eschews this kind of flexibility, and the complexity that follows, by simply building a foreach statement into the language that knows how to handle both arrays and custom types.”