Clarify usage of fmt::arg
Document that fmt::arg takes a non-owning reference, even if that reference is to a temporary. As such, users should make sure the lifetime of the reference lasts as long as the named argument.
This commit is contained in:
parent
82c24edcf6
commit
71e97b4819
@ -1200,6 +1200,7 @@ const unsigned long long format_arg_store<Context, Args...>::TYPES =
|
|||||||
Constructs an `~fmt::format_arg_store` object that contains references to
|
Constructs an `~fmt::format_arg_store` object that contains references to
|
||||||
arguments and can be implicitly converted to `~fmt::format_args`. `Context`
|
arguments and can be implicitly converted to `~fmt::format_args`. `Context`
|
||||||
can be omitted in which case it defaults to `~fmt::context`.
|
can be omitted in which case it defaults to `~fmt::context`.
|
||||||
|
See `~fmt::arg` for lifetime considerations.
|
||||||
\endrst
|
\endrst
|
||||||
*/
|
*/
|
||||||
template <typename Context = format_context, typename... Args>
|
template <typename Context = format_context, typename... Args>
|
||||||
@ -1384,6 +1385,12 @@ typename buffer_context<Char>::type::iterator vformat_to(
|
|||||||
\rst
|
\rst
|
||||||
Returns a named argument to be used in a formatting function.
|
Returns a named argument to be used in a formatting function.
|
||||||
|
|
||||||
|
Usage is analogous to `std::reference_wrapper
|
||||||
|
<https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper>`_,
|
||||||
|
except that rvalues references are not disabled.
|
||||||
|
The user should take care to only pass in temporaries when
|
||||||
|
the named argument is itself a temporary, as per the following example.
|
||||||
|
|
||||||
**Example**::
|
**Example**::
|
||||||
|
|
||||||
fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23));
|
fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23));
|
||||||
@ -1394,9 +1401,11 @@ inline internal::named_arg<T, FMT_CHAR(S)> arg(const S& name, const T& arg) {
|
|||||||
return {name, arg};
|
return {name, arg};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \cond
|
||||||
// Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``.
|
// Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``.
|
||||||
template <typename S, typename T, typename Char>
|
template <typename S, typename T, typename Char>
|
||||||
void arg(S, internal::named_arg<T, Char>) = delete;
|
void arg(S, internal::named_arg<T, Char>) = delete;
|
||||||
|
/// \endcond
|
||||||
|
|
||||||
template <typename Container> struct is_contiguous : std::false_type {};
|
template <typename Container> struct is_contiguous : std::false_type {};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user