namespace std {
// (1)
template<class T, common_with<T> U>
requires input_iterator<common_type_t<T, U>>
struct common_type<basic_const_iterator<T>, U> {
using type = basic_const_iterator<common_type_t<T, U>>;
};
// (2)
template<class T, common_with<T> U>
requires input_iterator<common_type_t<T, U>>
struct common_type<U, basic_const_iterator<T>> {
using type = basic_const_iterator<common_type_t<T, U>>;
};
// (3)
template<class T, common_with<T> U>
requires input_iterator<common_type_t<T, U>>
struct common_type<basic_const_iterator<T>, basic_const_iterator<U>> {
using type = basic_const_iterator<common_type_t<T, U>>;
};
}
概要
basic_const_iterator
のためのcommon_type
特殊化。
- (1)(2) :
basic_const_iterator
とその他のイテレータ型の間の共通の型を取得する - (3) : 異なるイテレータ型による
basic_const_iterator
特殊化の間の共通の型を取得する
例
#include <iterator>
int main() {
using ct1 = std::common_type_t<int*, std::const_iterator<int*>>;
static_assert(std::same_as<ct1, std::basic_const_iterator<int*>>);
using ct2 = std::common_type_t<std::const_iterator<int*>, int*>;
static_assert(std::same_as<ct1, ct2>);
using ct3 = std::common_type_t<const int*, std::const_iterator<int*>>;
static_assert(std::same_as<ct3, std::basic_const_iterator<const int*>>);
using ct4 = std::common_type_t<std::basic_const_iterator<int*>, std::basic_const_iterator<const int*>>;
static_assert(std::same_as<ct4, std::basic_const_iterator<const int*>>);
}
出力
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: 13.1 ✅
- Visual C++: 2022 Update 6 ✅