I would love if C++ decided if it wants to be an object-oriented language or not. I had to do something like
std::set uniqueNotes = normalize(notes);
auto iterator = uniqueNotes.begin();
int base = *iterator;
iterator = std::next(iterator);
So, generating an iterator is object-oriented, getting the value is an overloaded operator, and moving the iterator is a function....give us a programmable programming language, and we're happy. Well, some of us
programmers... give us nada, and we complain ... we want Maybe give us one thing, and we complain ... we want the other thing too give us everything and we still complain ... we want it all, but not this way, that way, when will PLT people ever learn??? (kidding kidding 🤪 )
i guess this sort of thing is C++'s version of "well, a monad is just a functor in the category of endofunctors, what's the problem???"