http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60489

            Bug ID: 60489
           Summary: Document which functions can be recursively reentered
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Keywords: documentation
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org

The standard says:

17.6.5.8 Reentrancy [reentrancy]
Except where explicitly specified in this standard, it is
implementation-defined which functions in the Standard C ++ library may be
recursively reentered.

Our docs on implementation-defined properties (with the C++03 section number)
say:

"[17.4.4.5] Non-reentrant functions are probably best discussed in the various
sections on multithreading (see above)."

While that may be true, (1) the sections on multithreading are not "above" and
(2) don't say anything about reentrancy.

This affects whether, for example, an element being erased from a container
during a call to clear() can call clear() on the container again, see
http://stackoverflow.com/q/20755194/981959 (we probably *could* make that work
if we wanted to, but it would require more work to support a very uncommon
case).

I think the simplest solution is to document that for our implementation no
functions are reentrant unless specified otherwise, then specify otherwise
later for particular functions.

Reply via email to