diff --git a/test/copy_elision_test.cpp b/test/copy_elision_test.cpp index 4faf5ba..39123e1 100644 --- a/test/copy_elision_test.cpp +++ b/test/copy_elision_test.cpp @@ -4,6 +4,7 @@ #include #include +#include #ifdef NO_MOVE # undef BOOST_COPY_ASSIGN_REF @@ -73,9 +74,12 @@ unsigned X::instances = 0; stmt; \ } \ unsigned const n = X::copies - old_copies; \ - if (n > max) \ + volatile unsigned const minv(min), maxv(max); \ + BOOST_TEST(n <= maxv); \ + if (n > maxv) \ std::cout << "*** max is too low or compiler is buggy ***\n"; \ - if (n < min) \ + BOOST_TEST(n >= minv); \ + if (n < minv) \ std::cout << "*** min is too high or compiler is buggy ***\n"; \ \ std::cout << "-----------\n" \ @@ -84,7 +88,7 @@ unsigned X::instances = 0; << max - n << "/" << max - min \ << " possible elisions performed\n\n"; \ \ - if (n > min) \ + if (n > minv) \ std::cout << "*** " << n - min \ << " possible elisions missed! ***\n"; \ } @@ -105,7 +109,7 @@ struct trace char const* m_name; }; -void sink(X a) +void sink(X) { trace t("sink"); } @@ -146,28 +150,28 @@ int main(int argc, char* argv[]) { (void)argv; // Double parens prevent "most vexing parse" - CHECK_COPIES( X a(( lvalue() )), 1, 1, "Direct initialization from lvalue"); - CHECK_COPIES( X a(( rvalue() )), 0, 1, "Direct initialization from rvalue"); + CHECK_COPIES( X a(( lvalue() )), 1U, 1U, "Direct initialization from lvalue"); + CHECK_COPIES( X a(( rvalue() )), 0U, 1U, "Direct initialization from rvalue"); - CHECK_COPIES( X a = lvalue(), 1, 1, "Copy initialization from lvalue" ); - CHECK_COPIES( X a = rvalue(), 0, 1, "Copy initialization from rvalue" ); + CHECK_COPIES( X a = lvalue(), 1U, 1U, "Copy initialization from lvalue" ); + CHECK_COPIES( X a = rvalue(), 0U, 1U, "Copy initialization from rvalue" ); - CHECK_COPIES( sink( lvalue() ), 1, 1, "Pass lvalue by value" ); - CHECK_COPIES( sink( rvalue() ), 0, 1, "Pass rvalue by value" ); + CHECK_COPIES( sink( lvalue() ), 1U, 1U, "Pass lvalue by value" ); + CHECK_COPIES( sink( rvalue() ), 0U, 1U, "Pass rvalue by value" ); - CHECK_COPIES( nrvo_source(), 0, 1, "Named return value optimization (NRVO)" ); - CHECK_COPIES( urvo_source(), 0, 1, "Unnamed return value optimization (URVO)" ); + CHECK_COPIES( nrvo_source(), 0U, 1U, "Named return value optimization (NRVO)" ); + CHECK_COPIES( urvo_source(), 0U, 1U, "Unnamed return value optimization (URVO)" ); // Just to prove these things compose properly - CHECK_COPIES( X a(urvo_source()), 0, 2, "Return value used as ctor arg" ); + CHECK_COPIES( X a(urvo_source()), 0U, 2U, "Return value used as ctor arg" ); // Expect to miss one possible elision here - CHECK_COPIES( identity( rvalue() ), 0, 2, "Return rvalue passed by value" ); + CHECK_COPIES( identity( rvalue() ), 0U, 2U, "Return rvalue passed by value" ); // Expect to miss an elision in at least one of the following lines - CHECK_COPIES( X a = ternary( argc == 1000 ), 0, 2, "Return result of ternary operation" ); - CHECK_COPIES( X a = ternary( argc != 1000 ), 0, 2, "Return result of ternary operation again" ); - return 0; + CHECK_COPIES( X a = ternary( argc == 1000 ), 0U, 2U, "Return result of ternary operation" ); + CHECK_COPIES( X a = ternary( argc != 1000 ), 0U, 2U, "Return result of ternary operation again" ); + return boost::report_errors(); } #include diff --git a/test/unique_ptr_default_deleter.cpp b/test/unique_ptr_default_deleter.cpp index 35563f9..1bf16ea 100644 --- a/test/unique_ptr_default_deleter.cpp +++ b/test/unique_ptr_default_deleter.cpp @@ -47,8 +47,8 @@ struct B : public A { static int count; - B() {++count;} - B(const B&) {++count;} + B() : A() {++count;} + B(const B&) : A() {++count;} virtual ~B() {--count;} }; diff --git a/test/unique_ptr_functions.cpp b/test/unique_ptr_functions.cpp index d8cdf9e..21dc99c 100644 --- a/test/unique_ptr_functions.cpp +++ b/test/unique_ptr_functions.cpp @@ -31,8 +31,8 @@ struct B : public A { static int count; - B() {++count;} - B(const B&) {++count;} + B() : A() {++count;} + B(const B&) : A() {++count;} virtual ~B() {--count;} }; @@ -218,25 +218,25 @@ void test() BOOST_TEST(!(pb != 0)); BOOST_TEST(!(0 != pb)); //Less - BOOST_TEST((pa < 0) == (pa.get() < 0)); - BOOST_TEST((0 < pa) == (0 < pa.get())); - BOOST_TEST((pb < 0) == (pb.get() < 0)); - BOOST_TEST((0 < pb) == (0 < pb.get())); + BOOST_TEST((pa < 0) == (pa.get() < (A*)0)); + BOOST_TEST((0 < pa) == ((A*)0 < pa.get())); + BOOST_TEST((pb < 0) == (pb.get() < (A*)0)); + BOOST_TEST((0 < pb) == ((A*)0 < pb.get())); //Greater - BOOST_TEST((pa > 0) == (pa.get() > 0)); - BOOST_TEST((0 > pa) == (0 > pa.get())); - BOOST_TEST((pb > 0) == (pb.get() > 0)); - BOOST_TEST((0 > pb) == (0 > pb.get())); + BOOST_TEST((pa > 0) == (pa.get() > (A*)0)); + BOOST_TEST((0 > pa) == ((A*)0 > pa.get())); + BOOST_TEST((pb > 0) == (pb.get() > (A*)0)); + BOOST_TEST((0 > pb) == ((A*)0 > pb.get())); //Less or equal - BOOST_TEST((pa <= 0) == (pa.get() <= 0)); - BOOST_TEST((0 <= pa) == (0 <= pa.get())); - BOOST_TEST((pb <= 0) == (pb.get() <= 0)); - BOOST_TEST((0 <= pb) == (0 <= pb.get())); + BOOST_TEST((pa <= 0) == (pa.get() <= (A*)0)); + BOOST_TEST((0 <= pa) == ((A*)0 <= pa.get())); + BOOST_TEST((pb <= 0) == (pb.get() <= (A*)0)); + BOOST_TEST((0 <= pb) == ((A*)0 <= pb.get())); //Greater or equal - BOOST_TEST((pa >= 0) == (pa.get() >= 0)); - BOOST_TEST((0 >= pa) == (0 >= pa.get())); - BOOST_TEST((pb >= 0) == (pb.get() >= 0)); - BOOST_TEST((0 >= pb) == (0 >= pb.get())); + BOOST_TEST((pa >= 0) == (pa.get() >= (A*)0)); + BOOST_TEST((0 >= pa) == ((A*)0 >= pa.get())); + BOOST_TEST((pb >= 0) == (pb.get() >= (A*)0)); + BOOST_TEST((0 >= pb) == ((A*)0 >= pb.get())); } BOOST_TEST(A::count == 0); } @@ -270,25 +270,25 @@ void test() BOOST_TEST(!(pb != nullptr)); BOOST_TEST(!(nullptr != pb)); //Less - BOOST_TEST((pa < nullptr) == (pa.get() < nullptr)); - BOOST_TEST((nullptr < pa) == (nullptr < pa.get())); - BOOST_TEST((pb < nullptr) == (pb.get() < nullptr)); - BOOST_TEST((nullptr < pb) == (nullptr < pb.get())); + BOOST_TEST((pa < nullptr) == (pa.get() < (A*)nullptr)); + BOOST_TEST((nullptr < pa) == ((A*)nullptr < pa.get())); + BOOST_TEST((pb < nullptr) == (pb.get() < (A*)nullptr)); + BOOST_TEST((nullptr < pb) == ((A*)nullptr < pb.get())); //Greater - BOOST_TEST((pa > nullptr) == (pa.get() > nullptr)); - BOOST_TEST((nullptr > pa) == (nullptr > pa.get())); - BOOST_TEST((pb > nullptr) == (pb.get() > nullptr)); - BOOST_TEST((nullptr > pb) == (nullptr > pb.get())); + BOOST_TEST((pa > nullptr) == (pa.get() > (A*)nullptr)); + BOOST_TEST((nullptr > pa) == ((A*)nullptr > pa.get())); + BOOST_TEST((pb > nullptr) == (pb.get() > (A*)nullptr)); + BOOST_TEST((nullptr > pb) == ((A*)nullptr > pb.get())); //Less or equal - BOOST_TEST((pa <= nullptr) == (pa.get() <= nullptr)); - BOOST_TEST((nullptr <= pa) == (nullptr <= pa.get())); - BOOST_TEST((pb <= nullptr) == (pb.get() <= nullptr)); - BOOST_TEST((nullptr <= pb) == (nullptr <= pb.get())); + BOOST_TEST((pa <= nullptr) == (pa.get() <= (A*)nullptr)); + BOOST_TEST((nullptr <= pa) == ((A*)nullptr <= pa.get())); + BOOST_TEST((pb <= nullptr) == (pb.get() <= (A*)nullptr)); + BOOST_TEST((nullptr <= pb) == ((A*)nullptr <= pb.get())); //Greater or equal - BOOST_TEST((pa >= nullptr) == (pa.get() >= nullptr)); - BOOST_TEST((nullptr >= pa) == (nullptr >= pa.get())); - BOOST_TEST((pb >= nullptr) == (pb.get() >= nullptr)); - BOOST_TEST((nullptr >= pb) == (nullptr >= pb.get())); + BOOST_TEST((pa >= nullptr) == (pa.get() >= (A*)nullptr)); + BOOST_TEST((nullptr >= pa) == ((A*)nullptr >= pa.get())); + BOOST_TEST((pb >= nullptr) == (pb.get() >= (A*)nullptr)); + BOOST_TEST((nullptr >= pb) == ((A*)nullptr >= pb.get())); } BOOST_TEST(A::count == 0); #endif //#if !defined(BOOST_NO_CXX11_NULLPTR) diff --git a/test/unique_ptr_test_utils_beg.hpp b/test/unique_ptr_test_utils_beg.hpp index 1b50426..965732c 100644 --- a/test/unique_ptr_test_utils_beg.hpp +++ b/test/unique_ptr_test_utils_beg.hpp @@ -173,8 +173,8 @@ struct B : public A { static int count; - B() {++count;} - B(const B&) {++count;} + B() : A() {++count;} + B(const B &b) : A(b) {++count;} virtual ~B() {--count;} };