В классе
std::basic_string имеется один к одному отношение между конструкторами и соответствующими функциями членами класса
assign за исключением явного конструктора, так как он не принимает параметра-источника копирования данных.
Среди этих конструкторов имеется конструктор, объявленный следующим образом
basic_string(const basic_string& str, size_type pos, size_type n = npos,
const Allocator& a = Allocator());
.
Ему в соответствие ставится следующая функция член класса
assign basic_string& assign(const basic_string& str, size_type pos,
size_type n);
Как видно, у третьего параметра этой функции отсутствует аргумент по умолчанию, который имеется у аналогичного параметра соответствующего конструктора.
Я не вижу причин, по которым нельзя указать аргумент по умолчанию для этого параметра функции
assign.
На мой взгляд это серьезный дефект стандарта
С++, и данная функция член класса
assign должна определяться следующим образом:
basic_string& assign(const basic_string& str, size_type pos,
size_type n = npos ) ;
Пока никаких возражений со стороны членов Комитета по стандартизации C++ я не услышал.