/* * Created by Martin on 17/02/2017. * * Distributed under the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ #include "catch.hpp" // This is a minimal example for an issue we have found in 1.7.0 struct foo { int i; }; template bool operator==(const T& val, foo f){ return val == f.i; } TEST_CASE("#809") { foo f; f.i = 42; REQUIRE(42 == f); } // ------------------------------------------------------------------ // Changes to REQUIRE_THROWS_AS made it stop working in a template in // an unfixable way (as long as C++03 compatibility is being kept). // To prevent these from happening in the future, this needs to compile void throws_int(bool b) { if (b) { throw 1; } } template bool templated_tests(T t) { int a = 3; REQUIRE(a == t); CHECK(a == t); REQUIRE_THROWS(throws_int(true)); CHECK_THROWS_AS(throws_int(true), const int&); REQUIRE_NOTHROW(throws_int(false)); REQUIRE_THAT("aaa", Catch::EndsWith("aaa")); return true; } TEST_CASE("#833") { REQUIRE(templated_tests(3)); } // Test containing example where original stream insertable check breaks compilation #if defined (CATCH_CONFIG_CPP11_STREAM_INSERTABLE_CHECK) namespace { struct A {}; std::ostream& operator<< (std::ostream &o, const A &) { return o << 0; } struct B : private A { bool operator== (int) const { return true; } }; B f (); std::ostream g (); } TEST_CASE( "#872" ) { B x; REQUIRE (x == 4); } #endif