CxxUtils::Array< N > Node1 CxxUtils::Array< N > # WritableArray< N+1 > # m_rep # m_offs + Array() + Array() + valid() + shape() + size() + operator[]() + ptr() + begin() + end() + write_array() # Array() Node2 CxxUtils::WritableArray< 0 > # m_rep # m_offs - m_elt_nc - m_rep_nc + WritableArray() + operator=() + WritableArray() + operator[]() + operator[]() + ptr() + valid() + shape() + size() + ptr() + begin() + end() + write_array() - WritableArray() - WritableArray() Node1->Node2 Node3 CxxUtils::WritableArray< N > - m_rep_nc + WritableArray() + operator[]() + operator[]() + ptr() - WritableArray() Node1->Node3 Node4 CxxUtils::WritableArrayData< N >   + WritableArrayData() + WritableArrayData() Node3->Node4