Mr.Docs

Full-fidelity C++ documentation, straight from your code.

Keep the code simple. Get clear documentation.

Mr.Docs understands modern C++. You focus on design and maintainability.

Single Source of Truth

Mr.Docs turns the documentation comments that live next to your C++ declarations into authoritative reference pages. One source of truth—your code.

Built for C++

Mr.Docs models C++ accurately: overload sets, concepts and constraints, deduced return types, aliases, constants, SFINAE, inherited and hidden members, niebloids, and more.

Multiple output formats

Export to AsciiDoc, HTML, or XML - or extend it with your own generator plugins.

Customizable

Highly configurable: control output format and theme, tailor symbol selection, and tune generation to match your project’s standards.

More Code, Fewer Workarounds

Mr.Docs lets you keep code simple and maintainable.

  • Accurate rendering of attributes and exception specifications (e.g. [[noreturn]], noexcept).
/** Exit the program.

    The program will end immediately.

    @note This function does not return.
*/
[[noreturn]]
void
terminate() noexcept;

terminate

Exit the program.

Synopsis

Declared in <terminate.cpp>
[[noreturn]]
void
terminate() noexcept;

Description

The program will end immediately.

NOTE

This function does not return.

  • Documentation comments become structured reference pages—synopsis, description, parameters, and returns.
/** Return the distance between two points

    This function returns the distance between two points
    according to the Euclidean distance formula.

    @param x0 The x-coordinate of the first point
    @param y0 The y-coordinate of the first point
    @param x1 The x-coordinate of the second point
    @param y1 The y-coordinate of the second point
    @return The distance between the two points
*/
double
distance(double x0, double y0, double x1, double y1);

distance

Return the distance between two points

Synopsis

Declared in <distance.cpp>
double
distance(
    double x0,
    double y0,
    double x1,
    double y1);

Description

This function returns the distance between two points according to the Euclidean distance formula.

Return Value

The distance between the two points

Parameters

Name Description
x0 The x-coordinate of the first point
y0 The y-coordinate of the first point
x1 The x-coordinate of the second point
y1 The y-coordinate of the second point
  • Use directives to capture semantics beyond the signature.
/** Return true if a number is prime.

    @par Complexity

    Linear in n.

    @return Whether `n` is prime.
    @param n The number to test
*/
bool
is_prime(unsigned long long n) noexcept;

is_prime

Return true if a number is prime.

Synopsis

Declared in <is_prime.cpp>
bool
is_prime(unsigned long long n) noexcept;

Complexity

Linear in n.

Return Value

Whether n is prime.

Parameters

Name Description
n The number to test
  • Understands concepts, constraints, and SFINAE—rendered as you wrote them.
#include <type_traits>

/** Computes the square root of an integral value.

    This function calculates the square root of a
    given integral value using bit manipulation.

    @throws std::invalid_argument if the input value is negative.

    @tparam T The type of the input value. Must be an integral type.
    @param value The integral value to compute the square root of.
    @return The square root of the input value.
 */
template <typename T>
std::enable_if_t<std::is_integral_v<T>, T> sqrt(T value) {
    if (value < 0) {
        throw std::invalid_argument(
            "Cannot compute square root of a negative number");
    }
    T result = 0;
    // The second-to-top bit is set
    T bit = 1 << (sizeof(T) * 8 - 2);
    while (bit > value) bit >>= 2;
    while (bit != 0) {
        if (value >= result + bit) {
            value -= result + bit;
            result += bit << 1;
        }
        result >>= 1;
        bit >>= 2;
    }
    return result;
}

sqrt

Computes the square root of an integral value.

Synopsis

Declared in <sqrt.cpp>
template<typename T>
T
sqrt(T value)
requires std::is_integral_v<T>;

Description

This function calculates the square root of a given integral value using bit manipulation.

Exceptions

Name Thrown on
std::invalid_argument if the input value is negative.

Return Value

The square root of the input value.

Template Parameters

Name Description
T The type of the input value. Must be an integral type.

Parameters

Name Description
value The integral value to compute the square root of.
  • Function objects are documented as callable entities—operator() parameter list and return type appear directly on the variable.
struct abs_fn
{
    /** Compute the absolute value.

        @param x The input value.
        @return The absolute value of x.
    */
    double
    operator()(double x) const noexcept;
};

/** Return the absolute value of a number. */
constexpr abs_fn abs = {};

abs

Compute the absolute value.

Synopsis

Declared in <function_object.cpp>
double
abs(double x) noexcept;

Return Value

The absolute value of x.

Parameters

Name Description
x The input value.

Like what you see? Star us on GitHub: