- print[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp23[meta cpp]
namespace std {
void vprint_unicode(string_view fmt,
format_args args); // (1) C++23
void vprint_unicode(FILE* stream,
string_view fmt,
format_args args); // (2) C++23
}
- FILE[link /reference/cstdio/file.md.nolink]
- format_args[link /reference/format/basic_format_args.md]
書式指定でUnicode出力する。
- (1) : 標準出力に、書式指定でUnicode出力する
- (2) : 指定された
FILE
に、書式指定でUnicode出力する
std::ostream
から派生したクラスオブジェクトに対して出力したい場合は、<ostream>
ヘッダのstd::vprint_unicode()
関数を使用すること。
- (2)
stream
が有効な出力Cストリームを指していること
-
(1) : 以下と等価:
vprint_unicode(stdout, fmt, args);
- stdout[link /reference/cstdio/stdout.md.nolink]
-
(2) :
-
C++23 :
- 以下の方法で自動変数を初期化する:
string out = vformat(fmt, args);
- string[link /reference/string/basic_string.md]
- vformat[link /reference/format/vformat.md]
stream
がUnicodeを表示できる端末を参照している場合、ネイティブのUnicode APIを使用して端末に書き出すout
に無効なコードユニットが含まれる場合、その動作は未定義であり,実装者はそれを診断することが推奨される。それ以外の場合は、変更せずにストリームに書き出す。そうでなければ、変更せずstream
にout
を書き出す。- ネイティブのUnicode APIを使用する場合、この関数は
out
を書き出す前にフラッシュする
-
C++26 :
stream
のロックを取得するfmt
で書式指定に従って書式化されたargs
の文字表現をout
とするstream
がUnicodeを表示できる端末を参照している場合、ネイティブのUnicode APIを使用して端末に書き出すout
に無効なコードユニットが含まれる場合、その動作は未定義であり,実装者はそれを診断することが推奨される。それ以外の場合は、変更せずにストリームに書き出す。そうでなければ、変更せずstream
にout
を書き出す。- ネイティブのUnicode APIを使用する場合、この関数は
out
を書き出す前にフラッシュする - 関数終了時に、無条件にロックを手放す
-
- (2) :
- C++23 :
vformat()
関数がなんらかの例外を送出する可能性がある
- C++23 :
- 端末かストリームへの書き込みに失敗した場合、
system_error
を送出する bad_alloc
を送出する可能性がある
- POSIXおよびWindowsにおいて、「
stream
が端末を参照している」とは、それぞれ、isatty(fileno(stream))
、およびGetConsoleMode(_get_osfhandle(_fileno(stream)), ...) != 0
を意味する - Windowsにおいて、ネイティブなUnicode APIとは
WriteConsoleW()
である - 推奨の方式:ネイティブのUnicode APIを呼び出す際に文字コード変換が必要な場合、実装はUnicode標準 (Unicode Standard Version 14.0 - Core Specification, Chapter 3.9) に従って無効なコードユニットを「U+FFFD REPLACEMENT CHARACTER」で置き換える必要がある
- C++23
- Clang: 19 [mark verified]
- GCC: 14 [mark verified]
- ICC: ??
- Visual C++: 2022 Update 7 [mark verified]