Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::formatted_size(3)	      C++ Standard Libary	std::formatted_size(3)

NAME
       std::formatted_size - std::formatted_size

Synopsis
	  Defined in header <format>
	  template< class... Args >
	  std::size_t	 formatted_size(    /*format_string<Args...>*/	  fmt,
       (1) (since C++20)
	  Args&&... args );
	  template< class... Args >
	  std::size_t	formatted_size(	   /*wformat_string<Args...>*/	  fmt,
       (2) (since C++20)
	  Args&&... args );
	  template< class... Args >

	  std::size_t	   formatted_size(     const	 std::locale&	  loc,
       (3) (since C++20)

	  /*format_string<Args...>*/ fmt, Args&&... args );
	  template< class... Args >

	  std::size_t	  formatted_size(     const	std::locale&	  loc,
       (4) (since C++20)

	  /*wformat_string<Args...>*/ fmt, Args&&... args );

	  Determine  the total number of characters in the formatted string by
       formatting args
	  according to the format string fmt. If present, loc is used for  lo-
       cale-specific
	  formatting.

	  The behavior is undefined if std::formatter<std::remove_cvref_t<Ti>,
       CharT> does not
	  meet the BasicFormatter requirements for any Ti in Args.

Parameters
		    parameter  of  unspecified	type,  whose initialization is
       valid only if the
		    argument is	convertible to std::string_view	(for (1,3)) or
		    std::wstring_view (for (2,4)), and the result  of  conver-
       sion is a constant
		    expression	and a valid format string for Args. The	format
       string consists
		    of

		      *	ordinary characters (except { and }), which are	copied
       unchanged to
			the output,
		      *	escape sequences {{ and	}}, which are replaced with  {
       and }
			respectively in	the output, and
		      *	replacement fields.

		    Each replacement field has the following format:

		    { arg-id (optional)	}		(1)
		    { arg-id (optional)	: format-spec }	(2)

	  fmt	  - 1) replacement field without a format specification
		    2) replacement field with a	format specification

				  specifies  the index of the argument in args
       whose value is
				  to be	used for formatting; if	it is omitted,
       the arguments
		    arg-id	- are used in order.

				  The arg-ids in a format string must  all  be
       present or all be
				  omitted.  Mixing manual and automatic	index-
       ing is an error.
		    format-spec	- the  format  specification  defined  by  the
       std::formatter
				  specialization  for  the corresponding argu-
       ment.

		      *	For basic types	and standard string types, the	format
       specification is
			interpreted as standard	format specification.
		      *	 For  chrono types, the	format specification is	inter-
       preted as chrono
			format specification.
		      *	For other formattable types, the format	 specification
       is determined by
			user-defined formatter specializations.
	  args... - arguments to be formatted
	  loc	  - std::locale	used for locale-specific formatting

Return value
	  The total number of characters in the	formatted string.

Exceptions
	  Propagates any exception thrown by formatter.

Example
       // Run this code

	#include <format>
	#include <iostream>
	#include <vector>
	#include <string_view>

	int main()
	{
	    using namespace std::literals::string_view_literals;

	    constexpr	 auto	fmt_str	  {   "Hubble's	  H{0}	 {1}   {2:*^4}
       miles/sec/mpc."sv };
	    constexpr auto sub_zero { ""sv };  // { "\u2080"sv }  =>  {	 0xe2,
       0x82, 0x80 };
	    constexpr  auto  aprox_equ	{ ""sv }; // { "\u2245"sv } => { 0xe2,
       0x89, 0x85 };
	    constexpr int Ho { 42 }; //	H

	    const   auto   min_buffer_size   =	  std::formatted_size(fmt_str,
       sub_zero, aprox_equ, Ho);

	    std::cout << "Min buffer size = " << min_buffer_size << '\n';

	    //	Use  std::vector  as dynamic buffer. Note: buffer does not in-
       clude the trailing '\0'.
	    std::vector<char> buffer(min_buffer_size);

	    std::format_to_n(buffer.data(), buffer.size(), fmt_str,  sub_zero,
       aprox_equ, Ho);

	    std::cout	<<  "Buffer:  \""  <<  std::string_view{buffer.data(),
       min_buffer_size}	<< "\"\n";

	    // Or we can print the buffer  directly  by	 adding	 the  trailing
       '\0'.
	    buffer.push_back('\0');
	    std::cout << "Buffer: \"" << buffer.data() << "\"\n";
	}

Output:
	Min buffer size	= 37
	Buffer:	"Hubble's H  *42* miles/sec/mpc."
	Buffer:	"Hubble's H  *42* miles/sec/mpc."

	 Defect	reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	    DR	  Applied to	       Behavior	as published		  Cor-
       rect behavior
			     throws std::format_error for invalid      invalid
       format string
	  P2216R3 C++20	     format string			       results
       in compile-time
								       error
			     objects that are neither const-usable nor
	  P2418R2  C++20       copyable					 allow
       formatting these
			     (such as generator-like objects) are not  objects
			     formattable

See also
	  format_to   writes out formatted  representation  of	its  arguments
       through an output
	  (C++20)     iterator
		      (function	template)
	  format_to_n  writes  out  formatted  representation of its arguments
       through an output
	  (C++20)     iterator,	not exceeding specified	size
		      (function	template)

http://cppreference.com		  2022.07.31		std::formatted_size(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::formatted_size&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help