MRDOCS_PLUGIN_STDLIB_TAG
The standard library a plugin was built with.
Synopsis
Declared in <mrdocs/Platform.hpp>
#define MRDOCS_PLUGIN_STDLIB_TAG
Description
A plugin and MrDocs pass C++ objects between them: the plugin allocates a generator that MrDocs destroys, and both inline the standard library types the API exposes. That holds together only when both use the same standard library, configured so that it lays those types out the same way. A plugin reports this through mrdocs_plugin_stdlib_tag, and MrDocs refuses one whose value differs from its own. The compiler is not part of the tag. A plugin built with another compiler on the same standard library, such as Clang against a MrDocs built with GCC on libstdc++, is expected to load, because only the library's ABI is checked.
The text names the library and the settings that matter for it. Examples are libstdc++, cxx11‐abi 1, debug off, libc++, abi 1, and msvc‐stl, crt dynamic, iterator‐debug‐level 0. The runtime is dynamic, dynamic‐debug, static or static‐debug.
The tag holds only the settings that change how the standard library's types are laid out, or which heap they allocate from. These are the libstdc++ dual ABI and debug mode, the libc++ ABI version, and the MSVC iterator debug level and C runtime, release or debug. The tag leaves out the release of the library and the compiler. libstdc++ stays compatible across releases, and compilers that share a standard library, such as GCC and Clang on Linux, lay its types out the same way. Assertion and hardening settings change what the inline code checks rather than what it operates on. A static C runtime on both sides passes the check, yet gives each module a heap of its own, so MrDocs and its plugins have to use the DLL runtime.
Created with MrDocs