primem0ver
Emperor
Furthermore, the places where C++ excels are in things like graphics-associated calculations, which are anyway implemented inside of things like DirectX (and often are running on the GPU). Switches between managed and unmanaged code are a pain, and the martialing mechanisms needed themselves introduce overhead, so you cannot do it at a very granular level and still get any performance benefit. The one place outside of the graphics where I can see there being a significant potential performance advantage, is in the map-generation modeling code. However, this is not running during gameplay (so doesn't matter turn to turn), and could anyway be written as a totally separate utility calling through same cross-process APIs that the UI/AI would use if necessary (and then be written in whatever you want provided someone writs an API wrapper)
C++ can be used to write managed code as well and the boundary between C++ managed code and c# managed code is practically non-existent when it comes to object access.
I could be wrong but I would think it would be possible to write C++ code that handles both managed and unmanaged classes to allow the exchange of information between basic types. Since number crunching is almost exclusively handled by simple (non string) types and structures, little or no marshalling would be necessary since c# allows explicit ordering in structures when necessary for cross-language compatibility; the rest would only involve simple types. I would think this would be relatively simple to accomplish. If so, the C++ intermediary managed code could act as the exchange layer between the c# code and the native number crunching.