/**
 * \page OverviewOfSanitizers Overview of Sanitizers
 *
 * The `cx_scheme_sanitizer` function provides a unified interface to enable
 * and configure multiple sanitizers in your CMake project. Sanitizers help
 * catch common memory-related and concurrency bugs early in the development
 * cycle. Instead of using specific functions for each sanitizer, you can
 * configure multiple sanitizers through the general function `cx_scheme_sanitizer`.
 *
 * <ul>
 *   <li><b>AddressSanitizer (ASan)</b>: Detects memory errors like buffer overflows
 *   and use-after-free.</li>
 *   <li><b>LeakSanitizer (LSan)</b>: Detects memory leaks.</li>
 *   <li><b>MemorySanitizer (MSan)</b>: Finds uninitialized memory reads.</li>
 *   <li><b>ThreadSanitizer (TSan)</b>: Detects data races in multi-threaded programs.</li>
 *   <li><b>UndefinedBehaviorSanitizer (UBSan)</b>: Detects various kinds of undefined
 *   behavior in C++ programs.</li>
 * </ul>
 *
 * By using `cx_scheme_sanitizer`, you can enable these sanitizers individually
 * or in combination, and apply custom suppression files or flags for more
 * precise control.
 *
 * <H2>Why Use the General Function `cx_scheme_sanitizer`?</H2>
 *
 * While each sanitizer has its own specific function (e.g., `cx_scheme_sanitizer_asan`
 * for AddressSanitizer), it is recommended to use the **general** function
 * `cx_scheme_sanitizer` to configure sanitizers in your project. This approach:
 * <ul>
 *   <li>Simplifies configuration by allowing you to enable multiple sanitizers
 *   through a single function call.</li>
 *   <li>Reduces the need to maintain separate function calls for each sanitizer.</li>
 *   <li>Allows suppression files and custom flags to be applied across sanitizers
 *   without requiring separate logic.</li>
 * </ul>
 *
 * **Example**:
 * <pre><code>
 * cx_scheme_sanitizer(ENABLE_ASAN ENABLE_LSAN)
 * </code></pre>
 * This enables both AddressSanitizer (ASan) and LeakSanitizer (LSan) with a
 * single function call.
 *
 * <H2>Using `cx_scheme_sanitizer` in CMake</H2>
 *
 * Sanitizers are typically enabled during development and testing phases to
 * catch bugs without incurring performance penalties in production. The
 * `cx_scheme_sanitizer` function allows you to easily enable sanitizers and
 * pass suppression files for known issues.
 *
 * **Basic Usage**:
 * <pre><code>
 * if(CMAKE_BUILD_TYPE STREQUAL "Debug")
 *   cx_scheme_sanitizer(ENABLE_ASAN ENABLE_LSAN SUPPRESSION_FILE_ASAN "/path/to/asan_suppressions.txt")
 * endif()
 * </code></pre>
 * In this example, both AddressSanitizer and LeakSanitizer are enabled with
 * a suppression file for ASan.
 *
 * <H2>Suppression Files and Custom Flags</H2>
 *
 * Each sanitizer supports the use of suppression files, allowing you to ignore
 * known issues (e.g., in third-party libraries) or false positives. You can also
 * append custom sanitizer flags for further customization.
 *
 * **Example**:
 * <pre><code>
 * cx_scheme_sanitizer(ENABLE_UBSAN SUPPRESSION_FILE_UBSAN "/path/to/ubsan_suppressions.txt"
 *   FLAGS "-fsanitize=undefined")
 * </code></pre>
 * In this example, UndefinedBehaviorSanitizer is enabled with a suppression
 * file and additional custom flags.
 *
 * <H2>Why Use These Sanitizers?</H2>
 *
 *  Using sanitizers in your C/C++ projects can significantly improve the
 *  robustness of your software by detecting hard-to-find bugs during
 *  development.
 *  Common issues like memory leaks, race conditions, and uninitialized reads
 *  can be caught before they cause serious production failures.
 *
 *  <b>Sanitizer Benefits:</b>
 *  <ul>
 *    <li><b>Faster Debugging</b>: Detect bugs early in the development cycle,
 *    reducing the time spent on hard-to-find errors.</li>
 *    <li><b>Safer Software</b>: Identify memory and thread issues that could
 *    lead to crashes or undefined behavior.</li>
 *    <li><b>Performance and Security</b>:
 *
 * <H2>Best Practices</H2>
 *
 * <ul>
 *   <li><b>Use `cx_scheme_sanitizer` for Unified Configuration</b>: Instead of calling
 *   separate functions for each sanitizer, use `cx_scheme_sanitizer` to configure
 *   multiple sanitizers and manage suppression files or custom flags in a
 *   streamlined manner.</li>
 *   <li><b>Enable Sanitizers in CI</b>: Integrate sanitizers in your continuous
 *   integration (CI) pipeline to catch memory and concurrency bugs early in
 *   the development lifecycle.</li>
 *   <li><b>Test in Debug Builds</b>: Enable sanitizers in debug builds to catch
 *   issues during development while leaving them disabled in release builds
 *   for optimal performance.</li>
 * </ul>
 *
 * <H2>Sanitizer Compatibility Table</H2>
 *
 * The following table outlines the compatibility between different sanitizers:
 *
 * <table>
 * <thead>
 *   <tr>
 *     <th>Sanitizer</th>
 *     <th>Compatible with ASan/LSan</th>
 *     <th>Compatible with UBSan</th>
 *     <th>Compatible with TSan</th>
 *     <th>Compatible with MSan</th>
 *   </tr>
 * </thead>
 * <tbody>
 *   <tr>
 *     <td><b>AddressSanitizer (ASan)</b></td>
 *     <td>Yes</td>
 *     <td>Yes</td>
 *     <td>No</td>
 *     <td>No</td>
 *   </tr>
 *   <tr>
 *     <td><b>LeakSanitizer (LSan)</b></td>
 *     <td>Yes (included with ASan)</td>
 *     <td>Yes</td>
 *     <td>No</td>
 *     <td>No</td>
 *   </tr>
 *   <tr>
 *     <td><b>UndefinedBehaviorSanitizer (UBSan)</b></td>
 *     <td>Yes</td>
 *     <td>N/A</td>
 *     <td>No</td>
 *     <td>No</td>
 *   </tr>
 *   <tr>
 *     <td><b>ThreadSanitizer (TSan)</b></td>
 *     <td>No</td>
 *     <td>No</td>
 *     <td>N/A</td>
 *     <td>No</td>
 *   </tr>
 *   <tr>
 *     <td><b>MemorySanitizer (MSan)</b></td>
 *     <td>No</td>
 *     <td>No</td>
 *     <td>No</td>
 *     <td>N/A</td>
 *   </tr>
 * </tbody>
 * </table>
 *
 * <H2>Additional References</H2>
 *
 * While the `cx_scheme_sanitizer` function is the recommended way to configure
 * sanitizers in your project, the following specific functions are available
 * if you need more fine-grained control:
 * <ul>
 *   <li>@see cx_scheme_sanitizer_asan</li>
 *   <li>@see cx_scheme_sanitizer_lsan</li>
 *   <li>@see cx_scheme_sanitizer_msan</li>
 *   <li>@see cx_scheme_sanitizer_tsan</li>
 *   <li>@see cx_scheme_sanitizer_ubsan</li>
 * </ul>
 *
 * \include{doc} Modules/Autotools/ArchiveX/cx_scheme_sanitizer_asan.inc
 * \include{doc} Modules/Autotools/ArchiveX/cx_scheme_sanitizer_ubsan.inc
 * \include{doc} Modules/Autotools/ArchiveX/cx_scheme_sanitizer_lsan.inc
 * \include{doc} Modules/Autotools/ArchiveX/cx_scheme_sanitizer_tsan.inc
 * \include{doc} Modules/Autotools/ArchiveX/cx_scheme_sanitizer_msan.inc
 */
