The contents of this module can be included with the header hpx/modules/assertion.hpp. These headers may be used by user-code but are not guaranteed stable (neither header location nor contents). You are using these at your own risk. If you wish to use non-public functionality from a module we strongly suggest only including the module header hpx/modules/assertion.hpp, not the particular header in which the functionality you would like to use is defined. See Public API for a list of names that are part of the public HPX API.


namespace hpx
namespace assertion


std::ostream &operator<<(std::ostream &os, source_location const &loc)
struct source_location
#include <source_location.hpp>

This contains the location information where HPX_ASSERT has been called

Public Members

const char *file_name
unsigned line_number
const char *function_name



This macro asserts that expr evaluates to true.


expr evaluates to false, The source location and msg is being printed along with the expression and additional. Afterwards the program is being aborted. The assertion handler can be customized by calling hpx::assertion::set_assertion_handler().
  • expr: The expression to assert on. This can either be an expression that’s convertible to bool or a callable which returns bool

  • msg: The optional message that is used to give further information if the assert fails. This should be convertible to a std::string

Asserts are enabled if HPX_DEBUG is set. This is the default for CMAKE_BUILD_TYPE=Debug

HPX_ASSERT_MSG(expr, msg)



namespace hpx
namespace assertion


using assertion_handler = void (*)(source_location const &loc, const char *expr, std::string const &msg)

The signature for an assertion handler.


void set_assertion_handler(assertion_handler handler)

Set the assertion handler to be used within a program. If the handler has been set already once, the call to this function will be ignored.


This function is not thread safe