diff --git a/include/span.h b/include/span.h index 32cf828..f4a57d9 100644 --- a/include/span.h +++ b/include/span.h @@ -55,6 +55,7 @@ // turn off some misguided warnings #pragma warning(push) #pragma warning(disable: 4351) // warns about newly introduced aggregate initializer behavior +#pragma warning(disable: 4512) // warns that assignment op could not be generated #endif // _MSC_VER <= 1800 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3435a7f..b16821b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -14,6 +14,7 @@ add_definitions(-DGSL_THROWS_FOR_TESTING) if(MSVC14 OR MSVC12) # has the support we need # remove unnecessary warnings about unchecked iterators add_definitions(-D_SCL_SECURE_NO_WARNINGS) + add_compile_options(/W4) else() include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14) @@ -25,6 +26,7 @@ else() else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() + add_compile_options(-Wall -Wno-missing-braces) endif() if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/unittest-cpp) diff --git a/tests/bounds_tests.cpp b/tests/bounds_tests.cpp index 53c44d1..0665260 100644 --- a/tests/bounds_tests.cpp +++ b/tests/bounds_tests.cpp @@ -32,7 +32,9 @@ SUITE(bounds_test) { for (auto point : static_bounds { 2 }) { - for (decltype(point)::size_type j = 0; j < decltype(point)::rank; j++) + for (decltype(point)::size_type j = 0; + j < static_cast(decltype(point)::rank); + j++) { use(j); use(point[j]); @@ -44,6 +46,7 @@ SUITE(bounds_test) { static_bounds<3, 4, 5> b; auto a = b.slice(); + (void)a; static_bounds<4, dynamic_range, 2> x{ 4 }; x.slice().slice(); } @@ -53,7 +56,7 @@ SUITE(bounds_test) static_bounds<4, dynamic_range, 2> bounds{ 3 }; auto itr = bounds.begin(); - + (void)itr; #ifdef CONFIRM_COMPILATION_ERRORS span av(nullptr, bounds); @@ -70,13 +73,14 @@ SUITE(bounds_test) { static_bounds<7, 4, 2> b1; static_bounds<7, dynamic_range, 2> b2 = b1; - + (void)b2; #ifdef CONFIRM_COMPILATION_ERRORS static_bounds<7, dynamic_range, 1> b4 = b2; #endif static_bounds b3 = b1; static_bounds<7, 4, 2> b4 = b3; + (void)b4; static_bounds b11; diff --git a/tests/notnull_tests.cpp b/tests/notnull_tests.cpp index a9624b8..67b478a 100644 --- a/tests/notnull_tests.cpp +++ b/tests/notnull_tests.cpp @@ -69,7 +69,8 @@ SUITE(NotNullTests) MyDerived derived; Unrelated unrelated; not_null u = &unrelated; - not_null p = &derived; + (void)u; + not_null p = &derived; not_null q = &base; q = p; // allowed with heterogeneous copy ctor CHECK(q == p); diff --git a/tests/span_tests.cpp b/tests/span_tests.cpp index 4c21116..6a67b02 100644 --- a/tests/span_tests.cpp +++ b/tests/span_tests.cpp @@ -27,7 +27,6 @@ using namespace gsl; namespace { - void use(int&) {} struct BaseClass {}; struct DerivedClass : BaseClass {}; } @@ -82,6 +81,7 @@ SUITE(span_tests) span avb = avd; #endif span avcd = avd; + (void)avcd; } TEST(boundary_checks) @@ -198,6 +198,7 @@ SUITE(span_tests) string str = "ttttttttttttttt"; // size = 15 auto t = str.data(); + (void)t; auto av3 = as_span(str); overloaded_func(av3.as_span(dim<>(1), dim<3>(), dim<5>()), 't'); } @@ -213,9 +214,11 @@ SUITE(span_tests) const std::array arr = {0.0, 0.0, 0.0}; auto cv = as_span(arr); + (void)cv; vector vec(3); auto dv = as_span(vec); + (void)dv; #ifdef CONFIRM_COMPILATION_ERRORS auto dv2 = as_span(std::move(vec)); @@ -223,12 +226,12 @@ SUITE(span_tests) } } - template void fn(const Bounds& b) { static_assert(Bounds::static_size == 60, "static bounds is wrong size"); } + template void fn(const Bounds&) { static_assert(Bounds::static_size == 60, "static bounds is wrong size"); } TEST (span_reshape_test) { int a[3][4][5]; auto av = as_span(a); - fn(av.bounds()); + fn(av.bounds()); auto av2 = av.as_span(dim<60>()); auto av3 = av2.as_span(dim<3>(), dim<4>(), dim<5>()); auto av4 = av3.as_span(dim<4>(), dim<>(3), dim<5>()); @@ -261,6 +264,7 @@ SUITE(span_tests) auto av = as_span(a); auto sub = av.section({15, 0, 0}, gsl::index<3>{2, 2, 2}); auto subsub = sub.section({1, 0, 0}, gsl::index<3>{1, 1, 1}); + (void)subsub; } TEST(span_section) @@ -755,6 +759,7 @@ SUITE(span_tests) CHECK_THROW(empty_av.cbegin()[0], fail_fast); for (auto& v : empty_av) { + (void)v; CHECK(false); } } @@ -767,6 +772,7 @@ SUITE(span_tests) CHECK_THROW(empty_av.cbegin()[0], fail_fast); for (auto& v : empty_av) { + (void)v; CHECK(false); } } @@ -782,6 +788,7 @@ SUITE(span_tests) for (auto& v : empty_sav) { + (void)v; CHECK(false); } } @@ -796,6 +803,7 @@ SUITE(span_tests) for (auto& v : empty_sav) { + (void)v; CHECK(false); } } @@ -1412,7 +1420,7 @@ SUITE(span_tests) CHECK_THROW(av1[10][3][4], fail_fast); span av2 = av1.as_span(dim<>(5), dim<6>(), dim<4>()); - + (void)av2; } TEST(span_sub) @@ -1424,7 +1432,7 @@ SUITE(span_tests) CHECK((av.sub<2,2>().bounds() == static_bounds<2>())); CHECK((av.sub<2,2>().length() == 2)); CHECK(av.sub(2,2).length() == 2); - CHECK(av.sub(2,3).length() == 3); + CHECK(av.sub(2,3).length() == 3); } @@ -1440,16 +1448,16 @@ SUITE(span_tests) CHECK((av.sub<0,5>().bounds() == static_bounds<5>())); CHECK((av.sub<0,5>().length() == 5)); CHECK(av.sub(0,5).length() == 5); - CHECK_THROW(av.sub(0,6).length(), fail_fast); - CHECK_THROW(av.sub(1,5).length(), fail_fast); + CHECK_THROW(av.sub(0,6).length(), fail_fast); + CHECK_THROW(av.sub(1,5).length(), fail_fast); } { span av = arr; CHECK((av.sub<5,0>().bounds() == static_bounds<0>())); - CHECK((av.sub<5, 0>().length() == 0)); - CHECK(av.sub(5,0).length() == 0); - CHECK_THROW(av.sub(6,0).length(), fail_fast); + CHECK((av.sub<5, 0>().length() == 0)); + CHECK(av.sub(5,0).length() == 0); + CHECK_THROW(av.sub(6,0).length(), fail_fast); } { @@ -1457,7 +1465,7 @@ SUITE(span_tests) CHECK((av.sub<0,0>().bounds() == static_bounds<0>())); CHECK((av.sub<0,0>().length() == 0)); CHECK(av.sub(0,0).length() == 0); - CHECK_THROW((av.sub<1,0>().length()), fail_fast); + CHECK_THROW((av.sub<1,0>().length()), fail_fast); } { @@ -1554,9 +1562,11 @@ SUITE(span_tests) // converting to dynamic_range a_v is always ok { span av = av4; + (void)av; } { span av = arr; + (void)av; } // initialization or assignment to static span that REDUCES size is NOT ok @@ -1572,6 +1582,7 @@ SUITE(span_tests) { span av = arr; span av2 = av; + (void)av2; } #ifdef CONFIRM_COMPILATION_ERRORS @@ -1583,7 +1594,7 @@ SUITE(span_tests) { span av = arr; - auto f = [&]() {span av2 = av.as_span(dim<>(2), dim<>(2));}; + auto f = [&]() {span av2 = av.as_span(dim<>(2), dim<>(2)); (void)av2; }; CHECK_THROW(f(), fail_fast); } @@ -1592,15 +1603,18 @@ SUITE(span_tests) // you can convert statically { span av2 = {arr, 2}; + (void)av2; } { span av2 = av4.first<1>(); + (void)av2; } // ...or dynamically { // NB: implicit conversion to span from span span av2 = av4.first(1); + (void)av2; } // initialization or assignment to static span that requires size INCREASE is not ok. @@ -1616,13 +1630,13 @@ SUITE(span_tests) } #endif { - auto f = [&]() {span av4 = {arr2, 2};}; + auto f = [&]() {span av4 = {arr2, 2}; (void)av4; }; CHECK_THROW(f(), fail_fast); } // this should fail - we are trying to assign a small dynamic a_v to a fixed_size larger one span av = arr2; - auto f = [&](){ span av2 = av; }; + auto f = [&](){ span av2 = av; (void)av2; }; CHECK_THROW(f(), fail_fast); } diff --git a/tests/string_span_tests.cpp b/tests/string_span_tests.cpp index ab48fcb..efdf0ff 100644 --- a/tests/string_span_tests.cpp +++ b/tests/string_span_tests.cpp @@ -41,14 +41,14 @@ SUITE(string_span_tests) { std::string s = "Hello there world"; cstring_span<> v = s; - CHECK(v.length() == s.length()); + CHECK(v.length() == static_cast::size_type>(s.length())); } TEST(TestConstructFromStdVector) { std::vector vec(5, 'h'); string_span<> v = vec; - CHECK(v.length() == vec.size()); + CHECK(v.length() == static_cast::size_type>(vec.size())); } TEST(TestStackArrayConstruction) @@ -100,6 +100,7 @@ SUITE(string_span_tests) { char stack_string[] = "Hello"; cstring_span<> v = ensure_z(stack_string); + (void)v; #ifdef CONFIRM_COMPILATION_ERRORS string_span<> v2 = v; string_span<> v3 = "Hello"; @@ -114,7 +115,7 @@ SUITE(string_span_tests) char stack_string[] = "Hello"; cstring_span<> v = ensure_z(stack_string); auto s2 = gsl::to_string(v); - CHECK(s2.length() == v.length()); + CHECK(static_cast::size_type>(s2.length()) == v.length()); CHECK(s2.length() == 5); } }