解决方法
是的,但正如交换在不同的地方定义并依赖于ADL一样,开始和结束也是如此. ‘通用’版本在< 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说:
In addition to being available via inclusion of the
<iterator>
header,the function templates in 24.6.5 are available when any of the following headers are included:<array>
,<deque>
,<forward_list>
,<list>
,<map>
,<regex>
,<set>
,<string>
,<unordered_map>
,<unordered_set>
,and<vector>
.