«Велосипед», связанный с массивом переменной длины.
template <class Elem>
struct Buf1d
{
size_t _size;
Elem* _ptr;
operator const Buf1d<const Elem>&() const
{ return reinterpret_cast<Buf1d<const Elem>&>(*this); }
}
Будто бы никаких проблем и две структуры, { size_t _size; int* _ptr; } и {size_t size; const int* _ptr; } внутри устроены гарантированно одинаково, ибо POD’ы. Прав я или не слишком?
P.S. Других полей нет, virtual нет, убраны лишь методы, не имеющие отношения к делу, наподобие operator[].