Можно ли реализовать члены std::forward_list как статические?

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 к любой стандартной функции-члену.)

Мне кажется, что библиотеке должно быть разрешено делать это, но я не уверен, не будет ли нарушено какое-то правило. И насколько нормативными являются перечисленные прототипы функций-членов?

9
задан Potatoswatter 19 October 2011 в 13:12
поделиться