April 2016

P3141: std::terminates()

A new WG21 paper is available.

Document number: P3141

Date: 2016-04-01

std::terminates()

by Hal T. Ng, Professor, C.S., LLVM.edu

Excerpt:

In 2014, the C++ committee tackled the problem of C++98's subtly hard-to-use std::uncaught_exception(), which was intended to return whether there were unhandled exceptions but did not work as intended in all destructor cases. The committee successfully addressed the problem by providing the improved std::uncaught_exceptions() (note plural "s"), which returns the number of unhandled exceptions in the current thread, and this function can now be used to reliably implement scope_guard and similar patterns in portable code.

Continuing in the same vein, this paper proposes to address C++98's related and sometimes-problematic std::terminate(). As its name suggests, the function causes abrupt program halts, which can cause data corruption if operations in flight are not completed gracefully. The set_terminate_handler() facility only partly addresses this problem by allowing a last-ditch handler to be invoked after unstoppable termination has already begun.

Along the same lines as conditional noexcept (noexcept(cond)), we propose a way for a sensitive operation, or a whole program, to determine in advance whether termination is possible. A program can test this by calling:

namespace std {
    bool terminates();
}

which returns true if and only if the program can subsequently terminate.

Because this function cannot fail to determine a valid result, it should be noexcept. Further, anticipating its usefulness in constant expressions and following LWG’s guidance for using constexpr wherever possible throughout the standard library, we propose in full:

namespace std {
    constexpr bool terminates() noexcept;
} 

Implementation notes: This function is so simple to specify that we foresee no implementation difficulty in any of the major C++ compilers.

Note that this is not the same as the halting problem, which would be to return true if and only if the program will halt, and which is known to take several hours to compute for programs longer than a few tens of millions of lines. Rather, this function is carefully constructed to return true if and only if the program could terminate, which is fundamentally different and well understood problem.

Acknowledgments: This paper expands on the core idea that was first proposed in committee hallway discussion by P.J. Plauger.

C++ Core Guidelines Checkers: Preview of the Lifetime Safety checker--Andrew Pardoe

The Visual C++ Team announces a preview of the Lifetime Safety checker for CppCoreCheck:

C++ Core Guidelines Checkers: Preview of the Lifetime Safety checker

From the article:

Lifetime safety is ensuring that the lifetime of any object matches its use. That is, don’t leak objects by forgetting to delete them in the case that they were allocated on the heap, and don’t access objects...

C++ sessions at JAX Finance

The JAX Finance conference is to be held in London in April.

The Conference for Technology in Finance

About the conference:

JAX Finance is a three-day conference for software experts focusing on the specific technological needs of the financial industry.

This year the conference includes a number of sessions on C++ (in addition to the existing focus on Java.)

Dates: 27 - 29 Apr

Venue: Park Plaza Victoria, London