Fix tests

This commit is contained in:
Simon Brand
2017-10-02 11:18:15 +01:00
parent f4e38f8dfa
commit 351d2bc7e0

View File

@@ -30,13 +30,15 @@ TEST_CASE("Noexcept", "[noexcept]") {
}; };
struct throw_swappable { struct throw_swappable {
throw_swappable(throw_swappable &&) {}
throw_swappable &swap(const throw_swappable &) { return *this; } throw_swappable &swap(const throw_swappable &) { return *this; }
}; };
REQUIRE(noexcept(std::declval<nothrow_swappable>().swap( tl::optional<nothrow_swappable> ont;
std::declval<nothrow_swappable>()))); tl::optional<throw_swappable> ot;
REQUIRE(!noexcept(
std::declval<throw_swappable>().swap(std::declval<throw_swappable>()))); REQUIRE(noexcept(ont.swap(ont)));
REQUIRE(!noexcept(ot.swap(ot)));
} }
SECTION("constructors") { SECTION("constructors") {
@@ -44,17 +46,18 @@ TEST_CASE("Noexcept", "[noexcept]") {
REQUIRE(noexcept(tl::optional<int>{tl::nullopt})); REQUIRE(noexcept(tl::optional<int>{tl::nullopt}));
struct nothrow_move { struct nothrow_move {
nothrow_move() = default;
nothrow_move(nothrow_move &&) noexcept = default; nothrow_move(nothrow_move &&) noexcept = default;
}; };
struct throw_move { struct throw_move {
throw_move() = default; throw_move(throw_move &&){};
throw_move(throw_move &&) = default;
}; };
REQUIRE(noexcept(tl::optional<nothrow_move>{std::declval<nothrow_move>()})); using nothrow_opt = tl::optional<nothrow_move>;
REQUIRE(!noexcept(tl::optional<throw_move>{std::declval<throw_move>()})); using throw_opt = tl::optional<throw_move>;
REQUIRE(noexcept(nothrow_opt{std::declval<nothrow_opt>()}));
REQUIRE(!noexcept(throw_opt{std::declval<throw_opt>()}));
} }
SECTION("assignment") { SECTION("assignment") {
@@ -72,10 +75,12 @@ TEST_CASE("Noexcept", "[noexcept]") {
throw_move_assign &operator=(const throw_move_assign &) {} throw_move_assign &operator=(const throw_move_assign &) {}
}; };
REQUIRE(noexcept(std::declval<nothrow_move_assign>() = using nothrow_opt = tl::optional<nothrow_move_assign>;
std::declval<nothrow_move_assign>())); using throw_opt = tl::optional<throw_move_assign>;
REQUIRE(!noexcept(std::declval<throw_move_assign>() =
std::declval<throw_move_assign>())); REQUIRE(
noexcept(std::declval<nothrow_opt>() = std::declval<nothrow_opt>()));
REQUIRE(!noexcept(std::declval<throw_opt>() = std::declval<throw_opt>()));
} }
SECTION("observers") { SECTION("observers") {
@@ -83,7 +88,5 @@ TEST_CASE("Noexcept", "[noexcept]") {
REQUIRE(noexcept(o1.has_value())); REQUIRE(noexcept(o1.has_value()));
} }
SECTION("modifiers") { SECTION("modifiers") { REQUIRE(noexcept(o1.reset())); }
REQUIRE(noexcept(o1.reset()));
}
} }