- iterator[meta header]
- std[meta namespace]
- basic_const_iterator[meta class]
- function[meta id-type]
- cpp23[meta cpp]
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>;
- is_lvalue_reference_v[link /reference/type_traits/is_lvalue_reference.md]
- iter_reference_t[link /reference/iterator/iter_reference_t.md]
- same_as[link /reference/concepts/same_as.md]
- remove_cvref_t[link /reference/type_traits/remove_cvref.md]
イテレータを通して参照先の要素のメンバにアクセスする
ラップするイテレータを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();
}
- cit->[color ff0000]
call const : 1
- C++23
- Clang: ??
- GCC: 13.1 [mark verified]
- Visual C++: 2022 Update 6 [mark verified]