diff options
Diffstat (limited to 'src/boost/libs/scope_exit/test/native_tpl.cpp')
-rw-r--r-- | src/boost/libs/scope_exit/test/native_tpl.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/boost/libs/scope_exit/test/native_tpl.cpp b/src/boost/libs/scope_exit/test/native_tpl.cpp new file mode 100644 index 00000000..edda6f3e --- /dev/null +++ b/src/boost/libs/scope_exit/test/native_tpl.cpp @@ -0,0 +1,73 @@ + +// Copyright (C) 2006-2009, 2012 Alexander Nasonov +// Copyright (C) 2012 Lorenzo Caminiti +// Distributed under the Boost Software License, Version 1.0 +// (see accompanying file LICENSE_1_0.txt or a copy at +// http://www.boost.org/LICENSE_1_0.txt) +// Home at http://www.boost.org/libs/scope_exit + +#include <boost/scope_exit.hpp> +#include <boost/rational.hpp> +#include <boost/typeof/typeof.hpp> +#include <boost/typeof/std/vector.hpp> +#include <boost/detail/lightweight_test.hpp> +#include <vector> + +template<class type> +void tpl_long( + type tval + , type & t + , type const& tc + , type volatile& tv + , type const volatile& tcv +) { + int i = 0; // non-dependent name + type const remember(tval); + + { + BOOST_SCOPE_EXIT_TPL( (&tval) (&t) (&tc) (&tv) (&tcv) (&i) ) { + tval = 1; + ++t; + ++tv; + } BOOST_SCOPE_EXIT_END + + BOOST_TEST(t == remember); + BOOST_TEST(tval == remember); + } + + BOOST_TEST(tval == 1); + BOOST_TEST(t == remember + 2); +} + +template<class Vector, int Value> +void tpl_vector( + Vector vval + , Vector & v + , Vector const& vc +) { + Vector const remember(vval); + + { + BOOST_SCOPE_EXIT_TPL( (&vval) (&v) (&vc) ) { + v.push_back(-Value); + vval.push_back(Value); + } BOOST_SCOPE_EXIT_END + + BOOST_TEST(v.size() == remember.size()); + BOOST_TEST(vval.size() == remember.size()); + } + + BOOST_TEST(v.size() == 1 + remember.size()); + BOOST_TEST(vval.size() == 1 + remember.size()); +} + +int main(void) { + long l = 137; + tpl_long(l, l, l, l, l); + + std::vector<int> v(10, 137); + tpl_vector<std::vector<int>, 13>(v, v, v); + + return boost::report_errors(); +} + |