Skip to content

Commit cba08f1

Browse files
committed
Simplified stl_bind.h enable_if_t templates
This removes some unncessary extra template parameters and parameter packs, making the logic a bit simpler.
1 parent 2b92a49 commit cba08f1

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

include/pybind11/stl_bind.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,19 @@ struct is_comparable<T, enable_if_t<container_traits<T>::is_pair>> {
6060
};
6161

6262
/* Fallback functions */
63-
template <typename, typename, typename... Args> void vector_if_copy_constructible(const Args&...) { }
64-
template <typename, typename, typename... Args> void vector_if_equal_operator(const Args&...) { }
65-
template <typename, typename, typename... Args> void vector_if_insertion_operator(const Args&...) { }
66-
67-
template<typename Vector, typename Class_, enable_if_t<std::is_copy_constructible<typename Vector::value_type>::value, int> = 0>
68-
void vector_if_copy_constructible(Class_ &cl) {
69-
cl.def(pybind11::init<const Vector &>(),
70-
"Copy constructor");
63+
template <typename, typename, typename... Args> void vector_if_copy_constructible(const Args &...) { }
64+
template <typename, typename, typename... Args> void vector_if_equal_operator(const Args &...) { }
65+
template <typename, typename, typename... Args> void vector_if_insertion_operator(const Args &...) { }
66+
67+
template<typename Vector, typename Class_>
68+
void vector_if_copy_constructible(enable_if_t<
69+
std::is_copy_constructible<typename Vector::value_type>::value, Class_> &cl) {
70+
71+
cl.def(pybind11::init<const Vector &>(), "Copy constructor");
7172
}
7273

73-
template<typename Vector, typename Class_, enable_if_t<is_comparable<Vector>::value, int> = 0>
74-
void vector_if_equal_operator(Class_ &cl) {
74+
template<typename Vector, typename Class_>
75+
void vector_if_equal_operator(enable_if_t<is_comparable<Vector>::value, Class_> &cl) {
7576
using T = typename Vector::value_type;
7677

7778
cl.def(self == self);
@@ -361,9 +362,10 @@ pybind11::class_<Vector, holder_type> bind_vector(pybind11::module &m, std::stri
361362
NAMESPACE_BEGIN(detail)
362363

363364
/* Fallback functions */
364-
template <typename, typename, typename... Args> void map_if_insertion_operator(const Args&...) { }
365+
template <typename, typename, typename... Args> void map_if_insertion_operator(const Args &...) { }
365366

366-
template <typename Map, typename Class_, typename... Args> void map_if_copy_assignable(Class_ &cl, const Args&...) {
367+
template <typename Map, typename Class_>
368+
void map_assignment(enable_if_t<std::is_copy_assignable<typename Map::mapped_type>::value, Class_> &cl) {
367369
using KeyType = typename Map::key_type;
368370
using MappedType = typename Map::mapped_type;
369371

@@ -376,8 +378,10 @@ template <typename Map, typename Class_, typename... Args> void map_if_copy_assi
376378
);
377379
}
378380

379-
template<typename Map, typename Class_, enable_if_t<!std::is_copy_assignable<typename Map::mapped_type>::value, int> = 0>
380-
void map_if_copy_assignable(Class_ &cl) {
381+
template<typename Map, typename Class_>
382+
void map_if_copy_assignable(enable_if_t<
383+
!std::is_copy_assignable<typename Map::mapped_type>::value,
384+
Class_> &cl) {
381385
using KeyType = typename Map::key_type;
382386
using MappedType = typename Map::mapped_type;
383387

0 commit comments

Comments
 (0)