Topic: Returning void


Author: "Paul D. DeRocco" <pderocco@ix.netcom.com>
Date: 1996/02/18
Raw View
The C++ standard doesn't allow a return statement with an expression to
be used in a function whose return type is void.

I suggest that it should be legal to return a void expression from a
function whose type is void. Why? It can be useful in templates.
Consider the following:

    template <class T, class R> class Functor {
    public:
        R& operator()() { return (obj.*mem)(); }
        Functor(T& o, R& (T::*m)()): obj(o), mem(m) {}
    private:
        T& obj;
        R& (T::*mem)();
    }

This defines a functor containing a pointer to an object to be operated
on, and a pointer to a member function defined for that object. It
should work for any member function that takes no arguments and returns
a result. Unfortunately, it won't work for a member function that
returns void. If return were modified as described above, this function
template would work for member functions that return void as well.

--

Ciao,
Paul D. DeRocco

[ To submit articles: Try just posting with your newsreader.  If that fails,
        use mailto:std-c++@ncar.ucar.edu
  FAQ:    http://reality.sgi.com/employees/austern_mti/std-c++/faq.html
  Policy: http://reality.sgi.com/employees/austern_mti/std-c++/policy.html
  Comments? mailto:std-c++-request@ncar.ucar.edu
]





Author: Michael Cook <mcook@cognex.com>
Date: 1996/02/20
Raw View
>>>>> "P" == "Paul D DeRocco" <pderocco@ix.netcom.com> writes:

 P>         R& operator()() { return (obj.*mem)(); }

You're trying to return a `void&', not a `void'.
Surely we wouldn't want the standard to allow `void&'.
---
[ To submit articles: Try just posting with your newsreader.  If that fails,
                      use mailto:std-c++@ncar.ucar.edu
  FAQ: http://reality.sgi.com/employees/austern_mti/std-c++/faq.html
  Policy: http://reality.sgi.com/employees/austern_mti/std-c++/policy.html
  Comments? mailto:std.c++-request@ncar.ucar.edu
]