File tree 2 files changed +9
-9
lines changed 2 files changed +9
-9
lines changed Original file line number Diff line number Diff line change @@ -1364,17 +1364,16 @@ template <typename... Ts> class type_caster<std::tuple<Ts...>>
1364
1364
1365
1365
// / Helper class which abstracts away certain actions. Users can provide specializations for
1366
1366
// / custom holders, but it's only necessary if the type has a non-standard interface.
1367
- template <typename T>
1367
+ template <typename T, typename SFINAE = void >
1368
1368
struct holder_helper {
1369
1369
static auto get (const T &p) -> decltype(p.get()) { return p.get (); }
1370
1370
};
1371
1371
1372
- // Specialization for `unique_ptr<>` to address #1138.
1373
- template <typename type, typename deleter>
1374
- struct holder_helper <std::unique_ptr<type, deleter>> {
1375
- using T = std::unique_ptr<type, deleter>;
1376
- static type* get (const T& p) { return p.get (); }
1377
- static type* get (T&& p) { return p.release (); }
1372
+ // Specialization for move-only holders to address #1138.
1373
+ template <typename T>
1374
+ struct holder_helper <T, enable_if_t <!is_copy_constructible<T>::value>> {
1375
+ static auto get (const T &p) -> decltype(p.get()) { return p.get (); }
1376
+ static auto get (T &&p) -> decltype(p.get()) { return p.release (); }
1378
1377
};
1379
1378
1380
1379
// / Type caster for holder types like std::shared_ptr, etc.
Original file line number Diff line number Diff line change @@ -40,7 +40,8 @@ template <typename T> class huge_unique_ptr {
40
40
uint64_t padding[10 ];
41
41
public:
42
42
huge_unique_ptr (T *p) : ptr(p) {};
43
- T *get () { return ptr.get (); }
43
+ T *get () const { return ptr.get (); }
44
+ T* release () { return ptr.release (); }
44
45
};
45
46
PYBIND11_DECLARE_HOLDER_TYPE (T, huge_unique_ptr<T>);
46
47
@@ -51,7 +52,7 @@ class custom_unique_ptr {
51
52
public:
52
53
custom_unique_ptr (T* p) : impl(p) { }
53
54
T* get () const { return impl.get (); }
54
- T* release_ptr () { return impl.release (); }
55
+ T* release () { return impl.release (); }
55
56
};
56
57
PYBIND11_DECLARE_HOLDER_TYPE (T, custom_unique_ptr<T>);
57
58
You can’t perform that action at this time.
0 commit comments