Improved error messaging: Cannot disown nullptr (as_unique_ptr).

This commit is contained in:
Ralf W. Grosse-Kunstleve 2021-01-11 22:04:18 -08:00
parent 4a879cfdcb
commit 6277910abd
2 changed files with 11 additions and 0 deletions

View File

@ -134,6 +134,10 @@ struct smart_holder {
}
void ensure_use_count_1(const char* context) const {
if (vptr.get() == nullptr) {
throw std::runtime_error(std::string("Cannot disown nullptr (") +
context + ").");
}
if (vptr.use_count() != 1) {
throw std::runtime_error(std::string("Cannot disown use_count != 1 (") +
context + ").");

View File

@ -317,3 +317,10 @@ TEST_CASE("error_disowned_holder", "[E]") {
hld.as_unique_ptr<int>();
REQUIRE_THROWS_WITH(hld.lvalue_ref<int>(), "Disowned holder (lvalue_ref).");
}
TEST_CASE("error_cannot_disown_nullptr", "[E]") {
auto hld = smart_holder::from_raw_ptr_take_ownership(new int(19));
hld.as_unique_ptr<int>();
REQUIRE_THROWS_WITH(hld.as_unique_ptr<int>(),
"Cannot disown nullptr (as_unique_ptr).");
}