std::forward_list
предоставляет insert_after
и erase_after
члены, которые могут не требовать фактического доступа к объекту std::forward_list
. Поэтому они могут быть реализованы как статические
функции-члены и вызываться без объекта list - полезно для объекта, который хочет удалить себя из списка, что является очень распространенным использованием. EDIT: Эта оптимизация применима только к forward_list
специализациям на std::allocator
или пользовательским stateless allocators.
Может ли реализация, соответствующая стандарту, сделать это?
В §17.6.5.5/3 сказано
Вызов сигнатуры функции-члена, описанной в стандартной библиотеке C++, ведет себя так, как если бы реализация не объявляет никаких дополнительных сигнатур функций-членов.
со сноской
Правильная программа на C++ всегда вызывает ожидаемую библиотечную функцию-член или функцию с эквивалентным поведением. Реализация может также определять дополнительные функции-члены, которые в противном случае не будут вызываться корректной программой на C++.
Мне не ясно, создаст ли добавление static
"другую" функцию-член, но удаление (неявного) аргумента не должно нарушить ничего, что не нарушило бы добавление аргументов по умолчанию, и это законно. (Вы не можете законно взять PTMF к любой стандартной функции-члену.)
Мне кажется, что библиотеке должно быть разрешено делать это, но я не уверен, не будет ли нарушено какое-то правило. И насколько нормативными являются перечисленные прототипы функций-членов?