/** @brief Class A */
class A
{
public:
    /**
     * @brief This an important function.
     *
     * First, we'll talk about the important thing that you should know. That
     * thing might have a reference to anotherFunction().
     *
     * Next, we'll talk about the second, less important thing.
     *
     * @param a A parameter.
     *
     * @return 0 on success.
     */
    int func(int a);

    /**
     * @brief Do something else.
     */
    void anotherFunction();
};

/** @brief Class B */
class B
{
public:
    /** @copydoc A::func() */
    int all(int a);

    /**
     * @copybrief A::func()
     *
     * The details are our own.
     *
     * We threw in a new line and a reference to A::func().
     *
     * @param a Our parameter.
     *
     * @return Whatever we want.
     */
    int brief(int a);

    /**
     * @brief Our own brief for this function.
     *
     * @copydetails A::func()
     */
    int details(int a);

    /**
     * @copydoc A::func()
     *
     * @param b Another parameter.
     */
    int detailsButMore(int a, double b);
};

/**
 * @brief Function outside of a class.
 *
 * The first thing.
 * \n\n
 * The second thing. This will be separated since there are explicit line
 * breaks.
 *
 * The third thing. This won't be since there are no line breaks.
 */
void outsideFunc();

/** @copydoc outsideFunc() */
void otherOutsideFunc();
