namespace std {
template<class Context>
class basic_format_arg {
private:
using char_type = typename Context::char_type; // exposition only
variant<monostate, bool, char_type,
int, unsigned int, long long int, unsigned long long int,
float, double, long double,
const char_type*, basic_string_view<char_type>,
const void*, handle> value; // exposition only
template<class T> explicit basic_format_arg(T& v) noexcept; // (2) exposition only
public:
basic_format_arg() noexcept; // (1)
};
}
概要
- (1): 空の
basic_format_argを構築する - (2): (説明専用)
make_format_argsの内部で使用され、引数からbasic_format_argsを構築する。
テンプレートパラメーター制約
- (2):
Tはフォーマットできる型であること
事前条件
- (2): もし
decay_t<T>がchar_type*またはconst char_type*である場合、static_cast<const char_type*>(v)はヌル終端されたchar_typeの配列を指すこと。
事後条件
- (1):
!(*this)
例外
投げない。
効果
-
(1):
valueをmonostateで初期化する。 -
(2):
TDをremove_const<T>として、以下の順にvalueを初期化する。TDがboolなら、vで初期化TDがcharかつchar_typeがwchar_tなら、valueをstatic_cast<wchar_t>(v)で初期化TDがcharかつchar_typeがwchar_tなら、valueをstatic_cast<wchar_t>(static_cast<unsigned char>(v))で初期化TDが符号つき整数型かつsizeof(TD) <= sizeof(int)なら、valueをstatic_cast<int>(v)で初期化TDが符号なし整数型かつsizeof(TD) <= sizeof(unsigned int)なら、valueをstatic_cast<unsigned int>(v)で初期化TDが符号つき整数型かつsizeof(TD) <= sizeof(long long int)なら、valueをstatic_cast<long long int>(v)で初期化TDが符号なし整数型かつsizeof(TD) <= sizeof(unsigned long long int)なら、valueをstatic_cast<unsigned long long int>(v)で初期化TDが浮動小数点数なら、vで初期化TDがbasic_string_viewまたはbasic_stringの特殊化で、TD::value_typeがchar_typeと等しければ、valueをbasic_string_view<char_type>(v.data(), v.size())で初期化decay_t<T>がchar_type*またはconst char_type*なら、valueをstatic_cast<const char_type*>(v)で初期化is_void_v<remove_pointer_t<TD>>がtrue、またはis_null_pointer_v<TD>がtrueなら、valueをstatic_cast<const void*>(v)で初期化- それ以外なら、
valueをhandle(v)で初期化
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??