libstdc++/9582: ODR violation in std::allocator

peturr02@ru.is peturr02@ru.is
Wed Feb 5 10:56:00 GMT 2003


>Number:         9582
>Category:       libstdc++
>Synopsis:       ODR violation in std::allocator
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Feb 05 10:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     peturr02@ru.is
>Release:        gcc 3.4 from 20030205
>Organization:
>Environment:
Red Hat Linux 8.0
>Description:
std::allocator<>::allocate calls __pool_alloc<>::allocate which uses the macro assert. The definition of assert depends on whether NDEBUG is defined before stl_alloc.h is included. If NDEBUG is defined in one source file before stl_alloc.h is included, but not in another source file, and those files are then linked together, the one-definition-rule is broken.

Also, as a QoI issue, I think that the contents of standard headers (other than cassert) should not depend on the macro NDEBUG, and cassert should not be included by other standard headers.
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list