summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/scope_exit/test/native_tpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/scope_exit/test/native_tpl.cpp')
-rw-r--r--src/boost/libs/scope_exit/test/native_tpl.cpp73
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();
+}
+