Существуют ли какие-либо общие предпочтения или правила, которые объясняют, когда вместо свободных функций std::begin и std::end?
Насколько я понимаю, если функция является шаблоном, в котором тип контейнера является параметром шаблона, то следует использовать std::begin и std::end, то есть:
template<class T> void do_stuff( const T& t )
{
    std::for_each( std::begin(t), std::end(t), /* some stuff */ );
}
Как насчет в других сценариях, таких как стандартная/членная функция, где известен тип контейнера? По-прежнему ли лучше использовать std::begin(cont) и std::end(cont) или должны ли функции члена контейнера cont.begin() и cont.end() быть предпочтительными?
Правильно ли я полагаю, что нет никакой пользы в производительности, вызывая cont.end() over std::end(cont)?
