C++/CLI規格ECMA-372を読んでで気づいた。
C#での配列 T[] と C++/CLIでの array<T> は違う。
T[] は System::Array であり IEnumerable であり IEnumerable<T> なんだが、
array<T> は System::Array であり IEnumerable であり IEnumerable<T> でない。
つまり、だ。
// C#
void printAll(IEnumerable<T> container) {
foreach ( T element in container ) {
System.Console.WriteLine(element);
}
}
に T[] を食わすことはできるが array<T> は食ってくれない。
C++/CLIで両方printAllするには、まったく同じ実装で
IEnumerable<T>, array<T>^ のふたつのメソッドを用意せにゃならん。
ムカついた。