- utility[meta header]
- std[meta namespace]
- constant_wrapper[meta class]
- function template[meta id-type]
- cpp26[meta cpp]
template <constexpr-param T>
constexpr auto operator++(this T self) noexcept; // 前置
template <constexpr-param T>
constexpr auto operator++(this T self, int) noexcept; // 後置constant_wrapperが保持する値をインクリメントする。
- 前置: インクリメント後の値を保持する
constant_wrapperを返す。 - 後置: インクリメント前の値を保持する
constant_wrapperを返す。
- 前置:
constant_wrapper<(++T::value)>{}を返す。 - 後置:
constant_wrapper<(T::value++)>{}を返す。
constant_wrapperが保持するvalueはconstであるため、保持する値そのものを変更する式(++value、value op= x、value = x)は不適格となる。- したがって、このオーバーロードは説明用基底クラス
cw-operatorsのインターフェースとして宣言されているものの、constant_wrapperに対してはオーバーロード解決に参加せず、使用できない。
- C++26
- Clang: 23 [mark verified]
- GCC: 16.1 [mark verified]
- Visual C++: 2026 Update 2 [mark noimpl]
- P2781R9
std::constant_wrapper - P3978R3
constant_wrappershould unwrap on call and subscript - LWG Issue 4383.
constant_wrapper's pseudo-mutators are underconstrained- C++26で、擬似変更演算子の戻り値型を
constant_wrapper<(++T::value)>のような直接形とすることで、変更操作が定数式にならない型に対してハードエラーではなくSFINAEで除外される(SFINAEフレンドリになる)よう修正された
- C++26で、擬似変更演算子の戻り値型を
- LWG Issue 4500.
constant_wrapperwording problems- C++26で、インクリメント/デクリメント演算子の戻り値型の式に含まれる文言上の誤り(どこにも定義されていない変数
Yの使用)がconstant_wrapper<(++T::value)>のように修正された
- C++26で、インクリメント/デクリメント演算子の戻り値型の式に含まれる文言上の誤り(どこにも定義されていない変数