Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.std.c++ > #768

Re: Shouldn't there be a way to exclude member functions out of name lookup explicitly?

Message-ID <NZKdnQZa84VGn1bInZ2dnUU78dGdnZ2d@giganews.com> (permalink)
Newsgroups comp.std.c++
From Jakob Bohm <jb-usenet@wisemo.com>
Subject Re: Shouldn't there be a way to exclude member functions out of name lookup explicitly?
Organization WiseMo A/S
References <820594f6-b670-4dba-8254-26d352489616@googlegroups.com> <5e134e90-067e-4d71-bf40-c4396bfc52f4@googlegroups.com> <31d52d8d-796a-4b61-8e56-6da52f2136be@googlegroups.com>
Date 2015-08-12 13:00 -0600

Show all headers | View raw


On 02/08/2015 05:09, Johannes Gerd Becker wrote:

>
> Of course, defining a helper function outside the class is a workaround (=
as
> is first defining a base class, as described in my original post).
>
> The point I would like to make, however, is another one.
>
> There are workarounds, yet they get the more tedious the more often the
> problem arises, namely in templated code. (To begin with: templates live
> mostly in headers, so the helper functions must live in headers as well,
> and break encapsulation, pollute my namespace or are simply inconvenient =
as
> they have to be templates themselves).
>
> It seems consensus (more or less) now that non-member functions defined i=
n
> the same namespace as a class are part of the interface of that class,
> BECAUSE they will usually be found by ADL.
>
> Now the rule that, within a member function of some class, say B, member
> functions of B take absolute precendence when a name is looked up, has th=
e
> unwanted effect that some part of the interface of another, completely
> unrelated class A, namely the nonmember functions that belong to the
> interface of A, may become unusable from within B.
>
> Why can I write
>
> using namespace std;
> auto i = begin (vec);
>
> everywhere in my code, yet not within a class that has a member function
> named begin ()?
>
> I tempted to think this should be considered a design mistake.
>
> One could think of several approaches to solve that problem:
>
> 1.) Introduce a clause like
>
> using explicit this;
>
> which would locally force explicitly using this-> when you want to access=
 a
> member. Then I would write
>
> using namespace std;
> using explicit this;
> auto i = begin (vec); // ADL
> auto j = this->begin (); // member
>
> 2.) Introduce a special qualifier (like, e.g., .::) to indicate that the
> following name does *not* refer to a member function. Then I could write
>
> using namespace std;
> auto i = .::begin (vec); // ADL
> auto j = begin (); // member
>
>
Doesn't the existing :: qualifier do this already:

auto i == ::begin(vec); // ADL

Or did I miss some unfortunate interaction with the way named namespaces
were formally added to the language?


Enjoy

Jakob
--
Jakob Bohm, CIO, Partner, WiseMo A/S.  https://www.wisemo.com
Transformervej 29, 2860 S=C3=B8borg, Denmark.  Direct +45 31 13 16 10
This public discussion message is non-binding and may contain errors.
WiseMo - Remote Service Management for PCs, Phones and Embedded


[ comp.std.c++ is moderated.  To submit articles, try posting with your ]
[ newsreader.  If that fails, use mailto:std-cpp-submit@vandevoorde.com ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html                      ]

Back to comp.std.c++ | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Shouldn't there be a way to exclude member functions out of name  lookup explicitly? Johannes Gerd Becker <johannes.gerd.becker@googlemail.com> - 2015-07-27 11:22 -0600
  Shouldn't there be a way to exclude member functions out of name   lookup explicitly? Anton Bikineev <ant.bikineev@googlemail.com> - 2015-07-30 11:54 -0600
    Re: Shouldn't there be a way to exclude member functions out of name    lookup explicitly? Johannes Gerd Becker <johannes.gerd.becker@googlemail.com> - 2015-08-01 21:09 -0600
      Re: Shouldn't there be a way to exclude member functions out of name lookup explicitly? Jakob Bohm <jb-usenet@wisemo.com> - 2015-08-12 13:00 -0600
        Re: Shouldn't there be a way to exclude member functions out of name  lookup explicitly? Johannes Gerd Becker <johannes.gerd.becker@googlemail.com> - 2015-08-16 17:29 -0600
          Re: Shouldn't there be a way to exclude member functions out of name lookup explicitly? Jakob Bohm <jb-usenet@wisemo.com> - 2015-08-18 22:35 -0600
  Re: Shouldn't there be a way to exclude member functions out of name  lookup explicitly? Richard Smith <richard@ex-parrot.com> - 2015-08-20 01:10 -0600
    Re: Shouldn't there be a way to exclude member functions out of name   lookup explicitly? Johannes Gerd Becker <johannes.gerd.becker@googlemail.com> - 2015-08-21 19:14 -0600

csiph-web