mirror of
https://github.com/pybind/pybind11.git
synced 2025-02-22 08:29:23 +00:00
Revert operator abuse
This commit is contained in:
parent
e71d9b9586
commit
e9a2e6d013
@ -13,7 +13,6 @@
|
|||||||
#include "buffer_info.h"
|
#include "buffer_info.h"
|
||||||
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <stdexcept>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@ -388,16 +387,13 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
error_already_set(const error_already_set &) noexcept = default;
|
error_already_set(const error_already_set &) = default;
|
||||||
error_already_set(error_already_set &&) noexcept = default;
|
error_already_set(error_already_set &&) = default;
|
||||||
|
|
||||||
inline ~error_already_set() override;
|
inline ~error_already_set() override;
|
||||||
|
|
||||||
const char *what() const noexcept override {
|
const char *what() const noexcept override {
|
||||||
auto *sup_what = std::runtime_error::what();
|
if (m_lazy_what.empty()) {
|
||||||
if (sup_what[0] != '\0') {
|
|
||||||
return sup_what;
|
|
||||||
} else if (m_lazy_what.empty()) {
|
|
||||||
try {
|
try {
|
||||||
m_lazy_what = detail::error_string(m_type.ptr(), m_value.ptr(), m_trace.ptr());
|
m_lazy_what = detail::error_string(m_type.ptr(), m_value.ptr(), m_trace.ptr());
|
||||||
} catch (const std::exception &e) {
|
} catch (const std::exception &e) {
|
||||||
@ -411,7 +407,6 @@ public:
|
|||||||
return m_lazy_what.c_str();
|
return m_lazy_what.c_str();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(!m_lazy_what.empty());
|
assert(!m_lazy_what.empty());
|
||||||
return m_lazy_what.c_str();
|
return m_lazy_what.c_str();
|
||||||
}
|
}
|
||||||
@ -420,8 +415,7 @@ public:
|
|||||||
/// already set it is cleared first. After this call, the current object no longer stores the
|
/// already set it is cleared first. After this call, the current object no longer stores the
|
||||||
/// error variables (but the `.what()` string is still available).
|
/// error variables (but the `.what()` string is still available).
|
||||||
void restore() {
|
void restore() {
|
||||||
// Abuse assignment operator to cache what()
|
what(); // Force-build `.what()`.
|
||||||
std::runtime_error::operator=(std::runtime_error(what())); // Force-build `.what()`.
|
|
||||||
if (m_lazy_what.empty()) {
|
if (m_lazy_what.empty()) {
|
||||||
pybind11_fail("Critical error building lazy error_string().");
|
pybind11_fail("Critical error building lazy error_string().");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user