- 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]