* Function overloading
@ 2007-03-21 7:26 Wesley Smith
[not found] ` <32380a010703210019o70bfe7d4ge45ced3c3838f412@mail.gmail.com>
0 siblings, 1 reply; 4+ messages in thread
From: Wesley Smith @ 2007-03-21 7:26 UTC (permalink / raw)
To: gcc-help
I have a question about function overloading. I'm getting alot of
errors when I do the following
class A
{
void draw();
};
class B : public A
{
static int draw(lua_State *L);
static B * get(lua_State *L, int i);
}
//bad
int B :: draw(lua_State *L)
{
B *b = get(L, 1);
b->draw() //<--- produces error because it things I'm calling
the static B function
}
//good
int B :: draw(lua_State *L)
{
B *b = get(L, 1);
b->A::draw() //<--- no errors
}
Shouldn't the compiler understand that I'm actually calling the
superclass' draw method, especially since the class' draw method is
static and I'm calling it as an instance method?
thanks,
wes
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Function overloading
[not found] ` <32380a010703210019o70bfe7d4ge45ced3c3838f412@mail.gmail.com>
@ 2007-03-21 10:38 ` Wesley Smith
2007-03-21 11:57 ` Andrew Haley
2007-03-21 12:26 ` Atwood, Robert C
0 siblings, 2 replies; 4+ messages in thread
From: Wesley Smith @ 2007-03-21 10:38 UTC (permalink / raw)
To: gcc-help
Wow that really clarifies things. Is there an URL for this documentation?
Many thanks,
wes
On 3/21/07, Vadim Doroginin <archimed7592@gmail.com> wrote:
> On 3/21/07, Wesley Smith <wesley.hoke@gmail.com> wrote:
> > I have a question about function overloading. I'm getting alot of
> > errors when I do the following
> >
> > class A
> > {
> > void draw();
> > };
> >
> >
> > class B : public A
> > {
> > static int draw(lua_State *L);
> > static B * get(lua_State *L, int i);
> > }
> >
> > //bad
> > int B :: draw(lua_State *L)
> > {
> > B *b = get(L, 1);
> > b->draw() //<--- produces error because it things I'm calling
> > the static B function
> > }
> >
> >
> > //good
> > int B :: draw(lua_State *L)
> > {
> > B *b = get(L, 1);
> > b->A::draw() //<--- no errors
> > }
> >
> >
> >
> > Shouldn't the compiler understand that I'm actually calling the
> > superclass' draw method, especially since the class' draw method is
> > static and I'm calling it as an instance method?
> >
> > thanks,
> > wes
> >
>
> No.
> IS 13.1 says:
> Certain function declarations cannot be overloaded:
> — Function declarations that differ only in the return type cannot be
> overloaded.
> — Member function declarations with the same name and the same
> parameter types cannot be overloaded if any of them is a static member
> function declaration (9.4). Likewise, member function template
> declarations with the same name, the same parameter types, and the
> same template parameter lists cannot be overloaded if any of them is a
> static member function template declaration. The types of the implicit
> object parameters constructed for the member functions for the purpose
> of overload resolution (13.3.1) are not considered when comparing
> parameter types for enforcement of this rule. In contrast, if there is
> no static member function declaration among a set of member function
> declarations with the same name and the same parameter types, then
> these member function declarations can be overloaded if they differ in
> the type of their implicit object parameter. [Example: the following
> illustrates this distinction:
> class X {
> static void f();
> void f(); // ill-formed
> void f() const; // ill-formed
> void f() const volatile; // ill-formed
> void g();
> void g() const; // OK: no static g
> void g() const volatile; // OK: no static g
> };
> —end example]
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Function overloading
2007-03-21 10:38 ` Wesley Smith
@ 2007-03-21 11:57 ` Andrew Haley
2007-03-21 12:26 ` Atwood, Robert C
1 sibling, 0 replies; 4+ messages in thread
From: Andrew Haley @ 2007-03-21 11:57 UTC (permalink / raw)
To: Wesley Smith; +Cc: gcc-help
Wesley Smith writes:
> Wow that really clarifies things. Is there an URL for this
> documentation?
http://www.open-std.org/jtc1/sc22/wg21/
Andrew.
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: Function overloading
2007-03-21 10:38 ` Wesley Smith
2007-03-21 11:57 ` Andrew Haley
@ 2007-03-21 12:26 ` Atwood, Robert C
1 sibling, 0 replies; 4+ messages in thread
From: Atwood, Robert C @ 2007-03-21 12:26 UTC (permalink / raw)
To: Wesley Smith, gcc-help
That does not make sense to me, in the original example the function is
not what I would call 'overloaded', as I understand a function in a
derived class is not in the same scope as a function in a base class, so
a function with the same name _hides_ the function from the base class
rather than overloading it, resulting in the behaviour observed by the
original poster.
I don't see how the prohibition of overloading a static function with
the same parameter types applies to hiding a function with _different_
parameter types?
Happy to be corrected if I'm wrong,
Robert
> -----Original Message-----
> From: gcc-help-owner@gcc.gnu.org
> [mailto:gcc-help-owner@gcc.gnu.org] On Behalf Of Wesley Smith
> Sent: 21 March 2007 07:26
> To: gcc-help@gcc.gnu.org
> Subject: Re: Function overloading
>
> Wow that really clarifies things. Is there an URL for this
> documentation?
> Many thanks,
> wes
>
> On 3/21/07, Vadim Doroginin <archimed7592@gmail.com> wrote:
> > On 3/21/07, Wesley Smith <wesley.hoke@gmail.com> wrote:
> > > I have a question about function overloading. I'm getting alot of
> > > errors when I do the following
> > >
> > > class A
> > > {
> > > void draw();
> > > };
> > >
> > >
> > > class B : public A
> > > {
> > > static int draw(lua_State *L);
> > > static B * get(lua_State *L, int i);
> > > }
> > >
> > > //bad
> > > int B :: draw(lua_State *L)
> > > {
> > > B *b = get(L, 1);
> > > b->draw() //<--- produces error because it things
> I'm calling
> > > the static B function
> > > }
> > >
> > >
> > > //good
> > > int B :: draw(lua_State *L)
> > > {
> > > B *b = get(L, 1);
> > > b->A::draw() //<--- no errors
> > > }
> > >
> > >
> > >
> > > Shouldn't the compiler understand that I'm actually calling the
> > > superclass' draw method, especially since the class' draw
> method is
> > > static and I'm calling it as an instance method?
> > >
> > > thanks,
> > > wes
> > >
> >
> > No.
> > IS 13.1 says:
> > Certain function declarations cannot be overloaded:
> > - Function declarations that differ only in the return type
> cannot be
> > overloaded.
> > - Member function declarations with the same name and the same
> > parameter types cannot be overloaded if any of them is a
> static member
> > function declaration (9.4). Likewise, member function template
> > declarations with the same name, the same parameter types, and the
> > same template parameter lists cannot be overloaded if any
> of them is a
> > static member function template declaration. The types of
> the implicit
> > object parameters constructed for the member functions for
> the purpose
> > of overload resolution (13.3.1) are not considered when comparing
> > parameter types for enforcement of this rule. In contrast,
> if there is
> > no static member function declaration among a set of member function
> > declarations with the same name and the same parameter types, then
> > these member function declarations can be overloaded if
> they differ in
> > the type of their implicit object parameter. [Example: the following
> > illustrates this distinction:
> > class X {
> > static void f();
> > void f(); // ill-formed
> > void f() const; // ill-formed
> > void f() const volatile; // ill-formed
> > void g();
> > void g() const; // OK: no static g
> > void g() const volatile; // OK: no static g
> > };
> > -end example]
> >
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-03-21 12:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-21 7:26 Function overloading Wesley Smith
[not found] ` <32380a010703210019o70bfe7d4ge45ced3c3838f412@mail.gmail.com>
2007-03-21 10:38 ` Wesley Smith
2007-03-21 11:57 ` Andrew Haley
2007-03-21 12:26 ` Atwood, Robert C
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).