returning a value from a constructor

Steve Holle sholle at link-comm.com
Fri Feb 18 19:44:58 UTC 2005


We ran into an interesting problem today.  We tried to call the following 
rtems_libio functions from a c++ constructor :

       rtems_libio_check_fd( fd );
       iop = rtems_libio_iop( fd );
       rtems_libio_check_is_open(iop);

The first and third generated the following errors :

/tcb2/rlc/source/char_available.c:55: returning a value from a constructor
/tcb2/rlc/source/char_available.c:57: returning a value from a constructor

This baffled us for a time until we realized that these two functions were 
actually macros that contained returns for failure.  We solved the problem 
by calling a subroutine that called the two functions.  If the two 
functions were actually subroutines instead of macros the code would have 
compiled.

I know this would be a huge job and probably not worth the time but it 
would be helpful if it was easy to tell macros from subroutines.  One 
method I've seen in the past is that all macros are capitalized.

Just wanted to get this into the archive in case someone else runs into 
this problem.

Steve Holle
Link Communications, Inc.
1035 Cerise Rd.
Billings, MT  59101
sholle at link-comm.com  




More information about the users mailing list