User configuration

A number of macros is provided for user configuration. Defining or undefining such macros triggers variations in some library functionality.

Under a Linux/Unix system, they are (un)set by `configure`; run

./configure --help

for a list of corresponding command-line options.

Under a Windows system, they must be (un)defined by editing the file <ql/userconfig.hpp> and commenting or uncommenting the relevant lines.

Such macros include:

#define QL_ERROR_FUNCTIONS

If defined, function information is added to the error messages thrown by the library. Undefined by default.

#define QL_ERROR_LINES

If defined, file and line information is added to the error messages thrown by the library. Undefined by default.

#define QL_ENABLE_TRACING

If enabled, tracing messages might be emitted by the library depending on run-time settings. Enabling this option can degrade performance. Undefined by default.

#define QL_NEGATIVE_RATES

If defined (the default), negative yield rates are allowed in a few places where they used to be forbidden.

#define QL_EXTRA_SAFETY_CHECKS

If defined, extra run-time checks are added to a few functions. This can prevent their inlining and degrade performance. Undefined by default.

#define QL_USE_INDEXED_COUPON

If defined, indexed coupons (see the documentation) are used in floating legs. If undefined (the default), par coupons are used.

#define QL_ENABLE_SESSIONS

If defined, singletons will return different instances for different sessions. You will have to provide and link with the library a sessionId() function in namespace QuantLib, returning a different session id for each session. Undefined by default.

#define QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN

If defined, a thread-safe (but less performant) version of the observer pattern will be used. You should define it if you want to use QuantLib via the SWIG layer within the JVM or .NET eco system or any environment with an async garbage collector. Undefined by default.

#define QL_ENABLE_SINGLETON_THREAD_SAFE_INIT

Define this to make Singleton initialization thread-safe. Undefined by default. Not compatible with multiple sessions.

#define QL_HIGH_RESOLUTION_DATE

If defined, date objects will support an intraday datetime resolution down to microseconds. Strickly monotone daycounters (Actual360, Actual365Fixed and ActualActual) will take the additional information into account and allow for accurate intraday pricing. If disabled (the default) the smallest resolution of date objects will be a single day. Intraday datetime resolution is experimental.

#define QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER

Define this to enable the parallel unit test runner. Undefined by default.