C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Translation-unit-local functions that access private class fields

From: Rhidian De Wit <rhidiandewit_at_[hidden]>
Date: Thu, 30 Apr 2026 10:48:56 +0200
I did this mistake sometime at the beginning of this discussion as well:
> There is some sort of permission control: some public function needs to
> call your private function directly or indirectly (i.e. through other
> protected/private functions). It does not matter if you add private
> functions if they cannot be called. So, yes anybody can add a private
> function anywhere in the source code. No, they can’t use it (without some
> weird tricks that might be possible even right now). The only place where
> this makes sense is in the implementation TU of the class. We need to at
> least declare the hidden private functions before they can be accessed by
> other member functions of the class.

This could be a mandate: That PEMs are only part of the translation unit of
the class they’re extending. So, declaring a PEM in a header becomes
impossible, but then how would one create PEMs for template classes? As
those are just in headers and will be part of multiple TUs.

Would it not be possible for the compiler to consider the PEM functions via
ADL? Assuming that overloaded PEM functions (ergo: no conflict with the
originally declared member-functions) are not allowed.


Op do 30 apr 2026 om 06:47 schreef Simon Schröder via Std-Proposals
std-proposals_at_[hidden]
<https://mailto:std-proposals_at_[hidden]>:


>
> > On Apr 30, 2026, at 12:41 AM, Steve Weinrich via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
> >
> > It seemed to me that what the OP wants is simply impossible because
> extending a class must require the classes permission. Either through
> access control or some new mechanism. A new mechanism must not permit
> access from everywhere!
>
> I did this mistake sometime at the beginning of this discussion as well:
> There is some sort of permission control: some public function needs to
> call your private function directly or indirectly (i.e. through other
> protected/private functions). It does not matter if you add private
> functions if they cannot be called. So, yes anybody can add a private
> function anywhere in the source code. No, they can’t use it (without some
> weird tricks that might be possible even right now). The only place where
> this makes sense is in the implementation TU of the class. We need to at
> least declare the hidden private functions before they can be accessed by
> other member functions of the class.
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
-- 
Rhidian De Wit
Software Engineer - Barco

Received on 2026-04-30 08:49:11