Здравствуйте, Zhendos, Вы писали:
Z>почему компилятор считает что "MyVec<MyVec<int>>" может из-за этого поменяться?
Потому, что константность ссылки, по которой вектор передается в foo, не гарантирует его неизменяемости. Да, взлом константности не есть хорошо с точки зрения дизайна, но программа-то остается well-formed, тем не менее. А значит, компилер обязан корректно обработать и этот случай.
Да и сколько там тех вычислений. Два mov-а и один sub. Неужто чувствительно?