Skip to content

Conversation

@mcharlou
Copy link

Original commit by Henri Weller, applied on OpenFOAM-9.x. Also works on previous version of OpenFOAM to allow compilation with GCC>=12.1.

According to the C++11 standard the xsputn might call an overload function which must be provided for correct operation and is required by gcc-12.1 but not earlier releases.

See

https://cplusplus.com/reference/streambuf/streambuf/xsputn/

Its default behavior in streambuf is to retrieve n characters, as if calling
sputc for each, stopping if any call would return EOF. Except it is
unspecified whether member overflow is called or whether other means are
used in case of overflows.

https://cplusplus.com/reference/streambuf/streambuf/overflow/

int overflow (int c = EOF);

    Put character on overflow

    Virtual function called by other member functions to put a character
    into the controlled output sequence without changing the current
    position.

    It is called by public member functions such as sputc to write a
    character when there are no writing positions available at the put
    pointer (pptr).

    Its default behavior in streambuf is to always return EOF (indicating
    failure), but derived classes can override this behavior to attempt to
    write the character directly and/or to alter pptr and other internal
    pointers so that more storage is provided, potentially writing unwritten
    characters to the controlled output sequence. Both filebuf and stringbuf
    override this virtual member function.

Parameters c
    Character to be put.

    If this is the end-of-file value (EOF), no character is put, but the
    other effects of calling this function are attempted.

Return Value
    In case of success, the character put is returned, converted to a value
    of type int_type using member traits_type::to_int_type.

    Otherwise, it returns the end-of-file value (EOF) either if called with
    this value as argument c or to signal a failure (some implementations
    may throw an exception instead).

Resolves bug-report https://bugs.openfoam.org/view.php?id=3856

According to the C++11 standard the xsputn might call an overload function which
must be provided for correct operation and is required by gcc-12.1 but not
earlier releases.

See

https://cplusplus.com/reference/streambuf/streambuf/xsputn/

    Its default behavior in streambuf is to retrieve n characters, as if calling
    sputc for each, stopping if any call would return EOF. Except it is
    unspecified whether member overflow is called or whether other means are
    used in case of overflows.

https://cplusplus.com/reference/streambuf/streambuf/overflow/

    int overflow (int c = EOF);

        Put character on overflow

        Virtual function called by other member functions to put a character
        into the controlled output sequence without changing the current
        position.

        It is called by public member functions such as sputc to write a
        character when there are no writing positions available at the put
        pointer (pptr).

        Its default behavior in streambuf is to always return EOF (indicating
        failure), but derived classes can override this behavior to attempt to
        write the character directly and/or to alter pptr and other internal
        pointers so that more storage is provided, potentially writing unwritten
        characters to the controlled output sequence. Both filebuf and stringbuf
        override this virtual member function.

    Parameters c
        Character to be put.

        If this is the end-of-file value (EOF), no character is put, but the
        other effects of calling this function are attempted.

    Return Value
        In case of success, the character put is returned, converted to a value
        of type int_type using member traits_type::to_int_type.

        Otherwise, it returns the end-of-file value (EOF) either if called with
        this value as argument c or to signal a failure (some implementations
        may throw an exception instead).

Resolves bug-report https://bugs.openfoam.org/view.php?id=3856
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant