Старт (контейнер) и конец (контейнер) стандартизированы? - PullRequest
6 голосов
/ 30 июля 2011

Являются ли шаблоны функций, не являющиеся членами begin(container) и end(container), частью C ++ 0x? Если да, то в каком заголовочном файле они живут?

1 Ответ

8 голосов
/ 30 июля 2011

Да, но точно так же, как swap определяется в разных местах и ​​зависит от ADL, так же, как и begin и end. «Универсальные» версии определены в <iterator>:

// 24.6.5, range access:
template <class C> auto begin(C& c) -> decltype(c.begin());
template <class C> auto begin(const C& c) -> decltype(c.begin());
template <class C> auto end(C& c) -> decltype(c.end());
template <class C> auto end(const C& c) -> decltype(c.end());
template <class T, size_t N> T* begin(T (&array)[N]);
template <class T, size_t N> T* end(T (&array)[N]);

Обратите внимание, что 24.6.5 говорит:

В дополнение к тому, что они доступны через включение заголовка <iterator>, шаблоны функций в 24.6.5 доступны, когда включены любые из следующих заголовков: <array>, <deque>, <forward_list>, <list> , <map>, <regex>, <set>, <string>, <unordered_map>, <unordered_set> и <vector>.

...