scope_exit/test/native_tpl.cpp

74 lines
1.7 KiB
C++

// 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();
}