TITLE: reference to a void [ Here is an interesting argument for allowing a reference to a void. -adc ] PROBLEM: Paul D. DeRocco 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 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. RESPONSE: bs@research.att.com (Bjarne Stroustrup), 25 Feb 96 I have written a note to the committee formally proposing this. The reason stated was roughly the one above. In addition - and for the same reason - I proposed to allow an expression of type void to be used as the argument of a function taking no argument. There is no guarantee that the committee will accept this or even that the committee will consider it (though clearly I think the committee ought to).