Некий
Jonathan Wakely определенно меня не любит.
А началось всё с
моего письма в рассылке GCC (см.
здесь предысторию возникновения этого письма), в котором я поинтересовался, а отчего же такая асимметрия:
- swap для пользовательских типов можно определять и в std, и в том же пространстве имён, откуда они;
- distance с advance - только в std, если вы
( Read more... )
Судя по всему, для этого анонимуса подходит твоё "просто некошерно".
Я решил проверить это утверждение на зуб, нашел много интересного по ходу ( что-то изложено в моём посте), и пришел к выводу, что когда припрёт, пАлюбому, расширять std надо, от этого никуда не денешься.
Ещё раз, что про это написано в стандарте - я не скажу, и Джонатан не сказал, будучи в курсе всего того, что со стандартом происходит.
Но gcc мне просто не оставляет никакого выбора, определив шаблонную функцию lower_bound так, что в ней вызывается квалифицированное имя std::distance.
Если с шаблонами функций из STL можно было бы и избежать переопределения их в std, в силу возможности использования ADL для неквалифицированного имени, то с шаблонами классов, насколько я понимаю, дела обстоят хуже.
Потому, что если ты определил свой пользовательский тип, а для него нужно изменить какие-нибудь std::iterator_traits<твой тип>, то ты можно специализировать только первичный шаблонный класс, а он находиться в std, значит, тебе нужно будет пАлюбому переопределять его в том же пространстве имён.
Другое дело, конечно, насколько часто тебе это нужно.
У меня всё началось с того, что в том самом проекте, из которого я вылетел (надеюсь, временно), потребовалось разработать специфичный параметризованный контейнер, который чем-то похож на B-Tree. И понеслась...
Reply
(The comment has been removed)
Т.е., мне не к спеху, как соберёшься, даже можно уже почитанную, я не скуплюсь полностью оплатить полную её цену.
Как думаешь, а? :-)
Reply
Leave a comment