c++/5104: template using std::set_terminate fails due to throw() qualifier in <exception>
harald@tritan.tn.cornell.edu
harald@tritan.tn.cornell.edu
Thu Dec 13 09:49:00 GMT 2001
>Number: 5104
>Category: c++
>Synopsis: template using std::set_terminate fails due to throw() qualifier in <exception>
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: unassigned
>State: open
>Class: rejects-legal
>Submitter-Id: net
>Arrival-Date: Thu Dec 13 09:26:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: harald@tritan.tn.cornell.edu
>Release: gcc version 3.0.2 20010905 (Red Hat Linux 7.1 3.0.1-3)
>Organization:
>Environment:
Linux Laptop running redhat 7.2
>Description:
A template using std:set_terminate does not compile with
the error message:
bug.C:12: could not convert template argument `std::set_terminate' to `void
(*(*)(void (*)()))()'
bug.C:12: ISO C++ forbids declaration of `Terminate' with no type
After changing line 74 of the header file 'exception' from
terminate_handler set_terminate(terminate_handler) throw();
to
terminate_handler set_terminate(terminate_handler);
then the file bug.C compiles to an object file.
>How-To-Repeat:
Compile the following source code with g++3 -c
#include <exception>
typedef void (*HandlerFunction)();
typedef HandlerFunction (*SetHandlerFunction)(HandlerFunction);
template <SetHandlerFunction set_function>
class HandlerStack {
public:
static void defaultHandler();
};
typedef HandlerStack<std::set_terminate> Terminate;
void Terminate::defaultHandler() {};
>Fix:
Change line 74 of header file 'exception' from
terminate_handler set_terminate(terminate_handler) throw();
to
terminate_handler set_terminate(terminate_handler);
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug.ii"
IyAxICJidWcuQyIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgMzkg
Ii91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh
Y2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0
aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAg
IHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFz
cyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRf
ZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJv
dygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CgogIHR5
cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoKICB0ZXJtaW5hdGVfaGFuZGxl
ciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwoKCiAgdm9pZCB0ZXJt
aW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKICB1bmV4cGVjdGVkX2hh
bmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwoKCiAgdm9p
ZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwojIDk1ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkg
dGhyb3coKTsKfQoKfQojIDIgImJ1Zy5DIiAyCgp0eXBlZGVmIHZvaWQgKCpIYW5kbGVyRnVuY3Rp
b24pKCk7CnR5cGVkZWYgSGFuZGxlckZ1bmN0aW9uICgqU2V0SGFuZGxlckZ1bmN0aW9uKShIYW5k
bGVyRnVuY3Rpb24pOwoKdGVtcGxhdGUgPFNldEhhbmRsZXJGdW5jdGlvbiBzZXRfZnVuY3Rpb24+
CmNsYXNzIEhhbmRsZXJTdGFjayB7CnB1YmxpYzoKICBzdGF0aWMgdm9pZCBkZWZhdWx0SGFuZGxl
cigpOwp9OwoKdHlwZWRlZiBIYW5kbGVyU3RhY2s8c3RkOjpzZXRfdGVybWluYXRlPiBUZXJtaW5h
dGU7Cgp2b2lkIFRlcm1pbmF0ZTo6ZGVmYXVsdEhhbmRsZXIoKSB7fTsK
More information about the Gcc-bugs
mailing list