- iterator[meta header]
- std[meta namespace]
- move_iterator[meta class]
- function[meta id-type]
- cpp11[meta cpp]
unspecified operator[](difference_type n) const; // (1) C++11
constexpr unspecified operator[](difference_type n) const; // (1) C++17
constexpr reference operator[](difference_type n) const; // (1) C++20- unspecified[italic]
任意の位置にランダムアクセスする。
- (1) :
- C++11 : 戻り値の型は未規定である。
base()[n]がプロキシオブジェクトを返す場合に、reference(value_type&&) へ暗黙変換すると、破棄済みの一時オブジェクトを参照しうるため - C++17 :
constexprが付加された - C++20 : 戻り値の型が
referenceとなり、ranges::iter_moveを用いて規定されるようになった
- C++11 : 戻り値の型は未規定である。
#include <iostream>
#include <vector>
#include <memory>
#include <iterator>
int main()
{
std::vector<std::unique_ptr<int>> v;
for (int i = 0; i < 5; ++i)
v.emplace_back(new int(i));
auto it = std::make_move_iterator(v.begin());
std::unique_ptr<int> p = it[2];
std::cout << *p << std::endl;
}- it[2][color ff0000]
- v.emplace_back[link /reference/vector/vector/emplace_back.md]
- std::make_move_iterator[link /reference/iterator/make_move_iterator.md]
2
- C++11
- Clang: ??
- GCC: 4.6.1 [mark verified]
- ICC: ??
- Visual C++: ??
- P0031R0 A Proposal to Add Constexpr Modifiers to
reverse_iterator,move_iterator,arrayand Range Access - P0896R4 The One Ranges Proposal (was Merging the Ranges TS)
- LWG Issue 872.
move_iterator::operator[]has wrong return type- C++11の策定時に、戻り値の型が
referenceから未規定の型へ改められた。base()[n]がプロキシオブジェクトを返す場合、reference(value_type&&) への暗黙変換によって破棄済みの一時オブジェクトを参照しうるため
- C++11の策定時に、戻り値の型が