visit_format_arg
and make_format_args
are not hidden friendsSection: 28.5.8.1 [format.arg] Status: C++20 Submitter: Tim Song Opened: 2020-01-16 Last modified: 2021-02-25
Priority: 0
View all other issues in [format.arg].
View all issues with C++20 status.
Discussion:
After P1965R0, friend function and function template
declarations always introduce hidden friends under the new blanket wording in
16.4.6.6 [hidden.friends]. However, 28.5.8.1 [format.arg] contains
"exposition only" friend declarations of visit_format_arg
and make_format_args
,
and those are not intended to be hidden. The only reason to have these declarations in the first
place is because these function templates are specified using the exposition-only private data
members of basic_format_arg
, but that's unnecessary — for example,
shared_ptr
's constructors are not exposition-only friends of enable_shared_from_this
,
even though the former are shown as assigning to the latter's exposition-only weak_this
private data member (see 20.3.2.2.2 [util.smartptr.shared.const]p1).
[2020-02-01 Status set to Tentatively Ready after five positive votes on the reflector.]
Proposed resolution:
This wording is relative to N4842.
Edit 28.5.8.1 [format.arg], class template basic_format_arg
synopsis, as indicated:
namespace std { template<class Context> class basic_format_arg { […]template<class Visitor, class Ctx> friend auto visit_format_arg(Visitor&& vis, basic_format_arg<Ctx> arg); // exposition only template<class Ctx, class... Args> friend format-arg-store<Ctx, Args...> make_format_args(const Args&... args); // exposition only[…] }; }