Почему код ниже превращается в ассебмлер, где каждую итерацию цикла
"size" перевычисляется? Грубо говоря "foo" получает "MyVec<int> *",
почему компилятор считает что "MyVec<MyVec<int>>" может из-за этого поменяться?
#include <cstddef>
template<typename T>
struct MyVec {
T *begin;
T *end;
constexpr size_t size() const noexcept { return end - begin; }
const T& operator[](size_t i) const noexcept { return begin[i]; }
};
void foo(MyVec<int> const&);
void indexed(MyVec<MyVec<int>> const& in) {
for (size_t idx = 0; idx < in.size(); ++idx) {
foo(in[idx]);
}
}
Ссылка на godbolt