constexpr const auto* operator->() const
requires is_lvalue_reference_v<iter_reference_t<Iterator>> &&
same_as<remove_cvref_t<iter_reference_t<Iterator>>, value_type>;
概要
イテレータを通して参照先の要素のメンバにアクセスする
戻り値
ラップするイテレータをcurrent_というメンバに保持するとして
Iteratorがcontiguous_iteratorのモデルとなる場合to_address((current_))
- それ以外の場合
addressof(*current_)
例
#include <iostream>
#include <iterator>
#include <vector>
struct S {
int n;
void print() const {
std::cout << "call const : " << this->n << '\n';
}
void print() {
std::cout << "call non const : " << this->n << '\n';
}
};
int main() {
std::vector<S> vec = {S{1}, S{3}};
std::basic_const_iterator cit = vec.begin();
cit->print();
}
出力
call const : 1
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: 13.1 ✅
- Visual C++: 2022 Update 6 ✅
参照
- P2278R4
cbeginshould always return a constant iterator - LWG Issue 3853.
basic_const_iterator<volatile int*>::operator->is ill-formed- C++23で、戻り値型が
const value_type*からconst auto*に変更され、基底のイテレータのvalue_typeがvolatile修飾されている場合(例:basic_const_iterator<volatile int*>)でも正しい型を推論しハードエラーを起こさないようになった
- C++23で、戻り値型が