Immutable data structures for C++