>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: [EMAIL PROTECTED] >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: