// Copyright Alexander Nasonov 2007-2008
//
// Distributed under the Boost Software License, Version 1.0. 
// (See accompanying file LICENSE_1_0.txt or copy at 
// http://www.boost.org/LICENSE_1_0.txt)

#include <boost/scope_exit.hpp>

int tu1();
int tu2();

inline int inline_f()
{
    int i = 99;
    {
        BOOST_SCOPE_EXIT( (&i) ) { i = -1; } BOOST_SCOPE_EXIT_END
    }
    return i;
}

#if !defined(BOOST_SCOPE_EXIT_AUX_GCC)
#error "BOOST_SCOPE_EXIT_AUX_GCC undefined!"
#elif BOOST_SCOPE_EXIT_AUX_GCC == 0 || BOOST_SCOPE_EXIT_AUX_GCC >= 304
template<class Int>
Int template_f(Int i)
{
    {
        BOOST_SCOPE_EXIT_TPL( (&i) ) { ++i; } BOOST_SCOPE_EXIT_END
    }
    return i;
}
#else
inline int template_f(int i)
{
    {
        BOOST_SCOPE_EXIT( (&i) ) { ++i; } BOOST_SCOPE_EXIT_END
    }
    return i;
}
#endif

