I do not see the reason why the third parameter may not have a default argument the same way as the corresponding constructor. That is IMO the assign method should be declared as
For the member function assign of std::basic_string there is no such a substitution. If you see the definition of the class you will see that for each constructor except the explicit constructor there is a corresponding member function assign. So there is relation one to one.
No they need not to provide one more overloaded function. They should update the C++ Standard and specify the default argument for the function.
Take into account that situation is different compared to the resize.
size_type is a typedef of a fundamental type. While as for the resize the old realization accepts the argument by value but the new realization accepts the argument by const reference. So there was a sense to substitute the old realization for two new overloaded functions. And there is no any sense to do the same with the assign.