🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Ajay Lunawat Thu, 24 Aug 1995 16:31
Re: Semantics operator->()
#1838
Author: Ajay Lunawat
Date: Thu, 24 Aug 1995 16:31
67 lines
2480 bytes
In article <41gq8b$1jm@tango.cs.wustl.edu>, schmidt@cs.wustl.edu (Douglas C. Schmidt) writes:
|> Hi,
|> 
|> 	I've got a question about the behavior of operator->(), in
|> particular, can it return a pointer to a builtin type?
|> 
|> 	For example, consider the following:
|> 	
|> ----------------------------------------
|> #include <stdio.h>
|> 
|> class Foo
|> {
|> public:
|>   Foo (int i): i_ (i) {}
|> 
|>   int *operator->()
|>   {
|>     return &this->i_;
|>   }
|> 
|> private:
|>   int i_;
|> };
|> 
|> int main ()
|> {
|>   Foo foo (10);
|>   printf ("%d, ", ++*(int *) foo.operator->());
|>   printf ("%d\n", ++*(int *) foo.operator->());
|>   // prints "11, 12"
|>   return 0;
|> }
|> ----------------------------------------
|> 
|> 	When I compile this with gcc it compiles and runs fine.
|> However, when I use SunC++ 4.0.1 I get the following error:
|> 
|> ----------------------------------------
|> % CC foo.C
|> "foo.C", line 9: Error: Cannot have a return type of int* for Foo::operator->().
|> 1 Error(s) detected.
|> ----------------------------------------
|> 
|> 	I tried to find a discussion of this in the ARM, but couldn't
|> find it discussed there.  Can someone please tell me if this is legal
|> in the draft ANSI/ISO C++ standard?

    Sun compiler seem to be doing right thing here.
    Consider this
    
    Foo *x = new Foo(10);
    x->f();  // f() is one of the public interface/function for Foo class.

    Now if *x.operator->() returned a pointer to int, the statements will be
    equivelent of:
    int *i = new i(10);
    i->f();
    
    Which of course should not work. That is operator->() should return 
    pointer to a User defiend type(struct/class).

Ajay

[ comp.std.c++ is moderated.  Submission address: std-c++@ncar.ucar.edu.
  Contact address: std-c++-request@ncar.ucar.edu.  The moderation policy
  is summarized in http://dogbert.lbl.gov/~matt/std-c++/policy.html. ]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads