[print.fun] (original) (raw)

31 Input/output library [input.output]

31.7 Formatting and manipulators [iostream.format]

31.7.10 Print functions [print.fun]

template<class... Args> void print(format_string<Args...> fmt, Args&&... args);

Effects: Equivalent to:print(stdout, fmt, std::forward<Args>(args)...);

template<class... Args> void print(FILE* stream, format_string<Args...> fmt, Args&&... args);

Effects: Let locksafe be(enable_nonlocking_formatter_optimization<remove_cvref_t<Args>> && ...).

If the ordinary literal encoding ([lex.charset]) is UTF-8, equivalent to:locksafe? vprint_unicode(stream, fmt.str, make_format_args(args...)) : vprint_unicode_buffered(stream, fmt.str, make_format_args(args...));

Otherwise, equivalent to:locksafe? vprint_nonunicode(stream, fmt.str, make_format_args(args...)) : vprint_nonunicode_buffered(stream, fmt.str, make_format_args(args...));

template<class... Args> void println(format_string<Args...> fmt, Args&&... args);

Effects: Equivalent to:println(stdout, fmt, std::forward<Args>(args)...);

Effects: Equivalent to:println(stdout);

template<class... Args> void println(FILE* stream, format_string<Args...> fmt, Args&&... args);

Effects: Equivalent to:print(stream, runtime_format(string(fmt.get()) + '\n'), std::forward<Args>(args)...);

void println(FILE* stream);

Effects: Equivalent to:print(stream, "\n");

void vprint_unicode(string_view fmt, format_args args);

Effects: Equivalent to:vprint_unicode(stdout, fmt, args);

void vprint_unicode_buffered(FILE* stream, string_view fmt, format_args args);

Effects: Equivalent to:string out = vformat(fmt, args); vprint_unicode(stream, "{}", make_format_args(out));

void vprint_unicode(FILE* stream, string_view fmt, format_args args);

Preconditions: stream is a valid pointer to an output C stream.

Effects: Locks stream.

Let out denote the character representation of formatting arguments provided by argsformatted according to specifications given in fmt.

Unconditionally unlocks stream on function exit.

See also: ISO/IEC 9899:2018, 7.21.2.

[Note 1:

On Windows the native Unicode API is WriteConsoleW andstream referring to a terminal means thatGetConsoleMode(_get_osfhandle(_fileno(stream)), ...)returns nonzero.

— _end note_]

system_error if writing to the terminal or stream fails.

May throw bad_alloc.

Recommended practice: If invoking the native Unicode API requires transcoding, implementations should substitute invalid code units with U+fffd replacement character per the Unicode Standard, Chapter 3.9 U+fffd Substitution in Conversion.

void vprint_nonunicode(string_view fmt, format_args args);

Effects: Equivalent to:vprint_nonunicode(stdout, fmt, args);

void vprint_nonunicode_buffered(FILE* stream, string_view fmt, format_args args);

Effects: Equivalent to:string out = vformat(fmt, args); vprint_nonunicode("{}", make_format_args(out));

void vprint_nonunicode(FILE* stream, string_view fmt, format_args args);

Preconditions: stream is a valid pointer to an output C stream.

Effects: While holding the lock on stream, writes the character representation of formatting arguments provided by argsformatted according to specifications given in fmt to stream.

system_error if writing to stream fails.

May throw bad_alloc.