| Title: | C++ |
| Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) |
| Moderator: | DECCXX::AMARTIN |
| Created: | Fri Nov 06 1987 |
| Last Modified: | Thu Jun 05 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 3604 |
| Total number of notes: | 18242 |
C++ T5.6-6
Digital UNIX 4.0-B
While recompiling C++ programs, the below error was generated. The
program here after does reproduce it. It appears to be a conflict
in the declarations of these functions between exception and
cxx_exception.h
/Michele.
exc.cxx:
--------
#include <exception>
#include <cxx_exception.h>
int i;
The error:
----------
cxx: Error: /usr/include/cxx/cxx_exception.h, line 30: In this declaration,
the linkage specification of "terminate" differs from that of a previous
declaration of "terminate".
void terminate (void);
-----^
cxx: Error: /usr/include/cxx/cxx_exception.h, line 31: In this
declaration, the linkage specification of "set_terminate" differs
from that of a previous declaration of "set_terminate".
PFV set_terminate (PFV terminator);
----^
cxx: Error: /usr/include/cxx/cxx_exception.h, line 32: In this
declaration, the linkage specification of "unexpected" differs fr
om that of a previous declaration of "unexpected".
void unexpected (void);
-----^
cxx: Error: /usr/include/cxx/cxx_exception.h, line 33: In this
declaration, the linkage specification of "set_unexpected" differ
s from that of a previous declaration of "set_unexpected".
PFV set_unexpected (PFV surprise);
----^
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 3567.1 | DECCXL::OUELLETTE | mudseason into blackfly season | Tue May 13 1997 14:14 | 23 | |
Hmmm. I can't reproduce this. Perhaps the problem is your headers. With V5.5... cosf> cat /etc/motd | head -1 Digital UNIX V4.0 (Rev. 386); Thu Aug 29 12:01:40 EDT 1996 cosf> cat cxx3567.cxx #include <exception> #include <cxx_exception.h> int i; cosf> !cxx cosf> cxx -V -c cxx3567.cxx cxx (cxx) DEC C++ V5.5-004 on Digital UNIX (Alpha) cosf> cxx -c cxx3567.cxx cosf> $RTS_COMPILER -c cxx3567.cxx -V /usr/proj/decc2/v56_cxx/cxxalphaosf/bl33/exe/deccxx_driver (cxx) DEC CXX T5.6-022 on Digital UNIX (Alpha) cosf> $RTS_COMPILER -c cxx3567.cxx I'd recomend checking your header files against those on the distribution kit for differences. Roland. | |||||
| 3567.2 | I'm working on this | TLE::WHITMAN | Tue May 13 1997 14:30 | 2 | |
I can reproduce this with V5.6 Ft2. It looks like a library
problem but I'm still investigating what the correct solution is.
| |||||
| 3567.3 | TLE::WHITMAN | Thu May 15 1997 15:21 | 36 | ||
hi,
Firstly, I apologize for the delay getting back to you. The
compilation errors you are getting in a program that includes
<exception> and <cxx_exception.h> are due to terminate(),
set_terminate(), unexpected(), and set_unexpected() being declared
with "C" linkage in <cxx_exception.h> and without "C" linkage in
<exception>. As it turns out, the library shipped with V5.6 only
includes entry points for terminate(), set_terminate(), unexpected(),
and set_unexpected() with "C" linkage. Therefore the work-around for
this problem is to edit /usr/include/cxx/exception as follows:
#if defined(__DECCXX)
extern "C" {
#endif
typedef void (*terminate_handler) ();
extern terminate_handler set_terminate(terminate_handler f) _RWSTD_THROW_SPEC_NU
LL;
extern void terminate( );
typedef void (*unexpected_handler) ();
extern unexpected_handler set_unexpected( unexpected_handler f) _RWSTD_THROW_SP
EC_NULL;
extern void unexpected();
#if defined(__DECCXX)
}
#endif
For the final release of DEC C++ V5.6 we will fix <exception> so that
the functions above are declared with "C" linkage. We will
investigate providing a more "C++ Standard" solution for these
routines in the library and headers for a future release of DEC C++.
Thanks for reporting this problem to us.
| |||||