aboutsummaryrefslogtreecommitdiffstats
path: root/3rdparty/pybind11/tests/test_copy_move.cpp
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2021-01-02 10:15:39 +0100
committerMiodrag Milanovic <mmicko@gmail.com>2021-01-02 10:15:39 +0100
commite76cdab6dd77bad411e6ac9372ee527aff89ef17 (patch)
treee9868f05cf455336d75f33b1312d71034f8fb334 /3rdparty/pybind11/tests/test_copy_move.cpp
parentc6cdf30501dcb2da01361229dd66a05dad73a132 (diff)
downloadnextpnr-e76cdab6dd77bad411e6ac9372ee527aff89ef17.tar.gz
nextpnr-e76cdab6dd77bad411e6ac9372ee527aff89ef17.tar.bz2
nextpnr-e76cdab6dd77bad411e6ac9372ee527aff89ef17.zip
Update pybind11 to version 2.6.1
Diffstat (limited to '3rdparty/pybind11/tests/test_copy_move.cpp')
-rw-r--r--3rdparty/pybind11/tests/test_copy_move.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/3rdparty/pybind11/tests/test_copy_move.cpp b/3rdparty/pybind11/tests/test_copy_move.cpp
index 98d5e0a0..2704217a 100644
--- a/3rdparty/pybind11/tests/test_copy_move.cpp
+++ b/3rdparty/pybind11/tests/test_copy_move.cpp
@@ -19,14 +19,14 @@ struct empty {
};
struct lacking_copy_ctor : public empty<lacking_copy_ctor> {
- lacking_copy_ctor() {}
+ lacking_copy_ctor() = default;
lacking_copy_ctor(const lacking_copy_ctor& other) = delete;
};
template <> lacking_copy_ctor empty<lacking_copy_ctor>::instance_ = {};
struct lacking_move_ctor : public empty<lacking_move_ctor> {
- lacking_move_ctor() {}
+ lacking_move_ctor() = default;
lacking_move_ctor(const lacking_move_ctor& other) = delete;
lacking_move_ctor(lacking_move_ctor&& other) = delete;
};
@@ -68,8 +68,8 @@ public:
int value;
};
-NAMESPACE_BEGIN(pybind11)
-NAMESPACE_BEGIN(detail)
+PYBIND11_NAMESPACE_BEGIN(pybind11)
+PYBIND11_NAMESPACE_BEGIN(detail)
template <> struct type_caster<MoveOnlyInt> {
PYBIND11_TYPE_CASTER(MoveOnlyInt, _("MoveOnlyInt"));
bool load(handle src, bool) { value = MoveOnlyInt(src.cast<int>()); return true; }
@@ -97,8 +97,8 @@ public:
operator CopyOnlyInt&() { return value; }
template <typename T> using cast_op_type = pybind11::detail::cast_op_type<T>;
};
-NAMESPACE_END(detail)
-NAMESPACE_END(pybind11)
+PYBIND11_NAMESPACE_END(detail)
+PYBIND11_NAMESPACE_END(pybind11)
TEST_SUBMODULE(copy_move_policies, m) {
// test_lacking_copy_ctor
@@ -116,9 +116,9 @@ TEST_SUBMODULE(copy_move_policies, m) {
r += py::cast<MoveOrCopyInt>(o).value; /* moves */
r += py::cast<MoveOnlyInt>(o).value; /* moves */
r += py::cast<CopyOnlyInt>(o).value; /* copies */
- MoveOrCopyInt m1(py::cast<MoveOrCopyInt>(o)); /* moves */
- MoveOnlyInt m2(py::cast<MoveOnlyInt>(o)); /* moves */
- CopyOnlyInt m3(py::cast<CopyOnlyInt>(o)); /* copies */
+ auto m1(py::cast<MoveOrCopyInt>(o)); /* moves */
+ auto m2(py::cast<MoveOnlyInt>(o)); /* moves */
+ auto m3(py::cast<CopyOnlyInt>(o)); /* copies */
r += m1.value + m2.value + m3.value;
return r;
@@ -175,14 +175,20 @@ TEST_SUBMODULE(copy_move_policies, m) {
m.attr("has_optional") = false;
#endif
- // #70 compilation issue if operator new is not public
+ // #70 compilation issue if operator new is not public - simple body added
+ // but not needed on most compilers; MSVC and nvcc don't like a local
+ // struct not having a method defined when declared, since it can not be
+ // added later.
struct PrivateOpNew {
int value = 1;
private:
-#if defined(_MSC_VER)
-# pragma warning(disable: 4822) // warning C4822: local class member function does not have a body
-#endif
- void *operator new(size_t bytes);
+ void *operator new(size_t bytes) {
+ void *ptr = std::malloc(bytes);
+ if (ptr)
+ return ptr;
+ else
+ throw std::bad_alloc{};
+ }
};
py::class_<PrivateOpNew>(m, "PrivateOpNew").def_readonly("value", &PrivateOpNew::value);
m.def("private_op_new_value", []() { return PrivateOpNew(); });