GeezerVison is showing cpprefjp.github.io — std::ranges::enable_view - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
variable
<ranges>
std::ranges:: enable_view (C++20)
namespace std :: ranges {
template < class T >
inline constexpr bool enable_view = derived_from < T , view_base > || is - derived - from - view - interface < T > ;
}
概要
enable_view<T>がtrueであることは、Tがview であるための必要条件である。
view コンセプトの要件は意味論要件がメインなため、view_base を基底クラスにするか、enable_viewを特殊化することで、明示的にviewであることを示すようになっている。
要件
cv修飾のないプログラム定義型に対して、この変数テンプレートを特殊化することが許可される。
そのような特殊化は定数式で使用可能であり、bool型を持つ必要がある。
is-derived-from-view-interface
is-derived-from-view-interface<T>は説明専用のbool型の変数テンプレートである。
namespace std :: ranges {
template < class T >
inline constexpr bool is - derived - from - view - interface = see below ; // 説明専用
}
is-derived-from-view-interface<T>は、Tがある型Uについてただ一つだけview_interface<U>をpublicな基底クラスに持ち、他の型Vについてのview_interface<V>を基底クラスに持たない場合にtrueとなる。
多くの場合U = Tであり、その場合Tはview_interface<T>をpublicで1つだけ継承していればこれを満たすことができる。継承関係が複雑な型などで、view_interfaceを複数継承階層の中に持っているとこれを満たすことができなくなる。
例
#include <ranges>
int main ()
{
using namespace std :: ranges ;
static_assert ( enable_view < view_base > );
static_assert ( ! enable_view < int > );
struct t : view_base { };
static_assert ( enable_view < t > );
}
出力
バージョン
言語
処理系
参照