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