Topic: Allowing void expressions


Author: herbs@cntc.com (Herb Sutter)
Date: 1997/04/15
Raw View
jzipnick@best.com (Jay Zipnick) wrote:
>Does anyone know the status of the proposal(s) to:
>
> - allow the return of a void expression from a function whose
>   return type is void.
>
> - allow an expression of type void to be used as the argument
>   of a function taking no argument.

Several void issues are being actively considered, including allowing the
construct "void&" to avoid other limitations on template instantiation.


---
Herb Sutter (mailto:herbs@cntc.com)

Current Network Technologies Corp. (http://www.cntc.com)
2695 North Sheridan Way, Suite 150, Mississauga ON Canada   L5K 2N6
Tel 416-805-9088   Fax 905-822-3824
---
[ comp.std.c++ is moderated.  To submit articles: Try just posting with your
                newsreader.  If that fails, use mailto:std-c++@ncar.ucar.edu
  comp.std.c++ FAQ: http://reality.sgi.com/austern/std-c++/faq.html
  Moderation policy: http://reality.sgi.com/austern/std-c++/policy.html
  Comments? mailto:std-c++-request@ncar.ucar.edu
]





Author: jzipnick@best.com (Jay Zipnick)
Date: 1997/04/15
Raw View
Does anyone know the status of the proposal(s) to:

 - allow the return of a void expression from a function whose
   return type is void.

 - allow an expression of type void to be used as the argument
   of a function taking no argument.

The message below was posted last year by Bjarne Stroustrup regarding this
issue.

Thanks,
Jay Zipnick
---------------------------------------------------------------------------
Paul D. DeRocco <pderocco@ix.netcom.com> writes:
 > 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.

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).

        - Bjarne
[ 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
]
---------------------------------------------------------------------------
---
[ comp.std.c++ is moderated.  To submit articles: try just posting with      ]
[ your news-reader.  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                             ]