Reading through the wiki for Save/Load, the comment about “The Hardest Concept…” regarding the output stream operator (<<) is rather strange. It raises the question: Why is the MemoryReader API using the output stream operator in the first place, instead of the input stream operator (>>)? Switching that would easily solve the syntactic ambiguity raised in the wiki, and use the operators in the convention C++ intends you to. ToBinary would use the output stream operator, and ToBeFilledWithData would use the input operator - just like std::ofstream and std::ifstream.
An even more clever API (for UE5?) could be to using an overloaded non-const == operator, with the underlying object either being a Save or Load object that serializes or de-serializes using the same API - half the lines of code of saving/loading explicitly, with a relatively small number of cases that do have to check if it’s a save or load (eg, for pointer fixups).