Skip to content

Latest commit

 

History

History
62 lines (46 loc) · 1.91 KB

File metadata and controls

62 lines (46 loc) · 1.91 KB

operator[]

  • utility[meta header]
  • std[meta namespace]
  • constant_wrapper[meta class]
  • function template[meta id-type]
  • cpp26[meta cpp]
template <class... Args>
static constexpr decltype(auto) operator[](Args&&... args) noexcept(/*see below*/);

概要

constant_wrapperが保持する値に対して、添字アクセスをおこなう。

戻り値

subscr-exprを以下のように定めたとき、subscr-exprを返す:

  • すべてのremove_cvref_t<Args>...constexpr-paramのモデルであり、かつconstant_wrapper<value[remove_cvref_t<Args>::value...]>が妥当な型である場合は、constant_wrapper<value[remove_cvref_t<Args>::value...]>{}
  • そうでない場合は、value[std::forward<Args>(args)...]

備考

  • 静的メンバ関数である。
  • 添字がすべてconstant_wrapperであり、その結果をふたたびconstant_wrapperで包める場合は、結果を包んで「型の世界」にとどめる。そうでない場合は、保持する値をアンラップして添字アクセスした結果をそのまま返す。
  • 例外指定はnoexcept(subscr-expr)と等価である。

#include <utility>

constexpr int data[] = {0, 10, 20, 30};

int main()
{
  // 配列を保持して添字アクセスする
  auto e = std::cw<data>[std::cw<2>];
  static_assert(e == 20);
}

出力


バージョン

言語

  • C++26

処理系

  • Clang: 23 [mark verified]
  • GCC: 16.1 [mark verified]
  • Visual C++: 2026 Update 2 [mark noimpl]

関連項目

参照