/****************************************************************************
**
** Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Sérgio Martins <sergio.martins@kdab.com>
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

#include "qscopeguard.h"

QT_BEGIN_NAMESPACE

/*!
    \class QScopeGuard
    \since 5.12
    \inmodule QtCore
    \brief Provides a scope guard for calling a function at the end of
           a scope.

    QScopeGuard<F> is a class of which the sole purpose is to run the function
    \a f in its destructor. This is useful for guaranteeing
    your cleanup code is executed, whether the function is exited normally,
    exited early by a return statement, or exited by an exception.

    \note Exceptions are not supported. The callable shouldn't throw when
          executed, copied or moved.

    \sa QScopedValueRollback
*/

/*!
    \fn template <typename F> QScopeGuard<F>::QScopeGuard(F &&f)
    \fn template <typename F> QScopeGuard<F>::QScopeGuard(const F &f)

    Create a scope guard that will execute \a f at the end of the scope.

    If \e F is a lambda, its type cannot be written. In that case you need to
    either rely on class template argument deduction (C++17 feature) and leave
    the template parameter out completely or use the helper function
    qScopeGuard() instead of this constructor.

    \since 5.15
*/

/*! \fn template <typename F> void QScopeGuard<F>::dismiss()

    Disarms the scope guard, so that the function \e F will not be called at
    the end of the scope.
*/

/*!
    \fn [qScopeGuard] template <typename F> QScopeGuard<typename std::decay<F>::type> qScopeGuard(F &&f)
    \inmodule QtCore
    \relates QScopeGuard
    \brief The qScopeGuard function can be used to call a function at the end
           of the scope.
    \ingroup misc

    Create a scope guard that will execute \a f at the end of the scope.

    This helper function is provided so that you can easily construct a
    QScopeGuard without having to name the template parameter for the type of
    the callable. If \e F is a lambda then you cannot write its type and relying
    on this helper or class template argument deduction is necessary.

    Example usage is as follows:

    \snippet code/src_corelib_tools_qscopeguard.cpp 0

*/

QT_END_NAMESPACE
