switched cpp_function to use variadic arguments
diff --git a/include/pybind/operators.h b/include/pybind/operators.h
index c2c1338..e0f858f 100644
--- a/include/pybind/operators.h
+++ b/include/pybind/operators.h
@@ -45,17 +45,17 @@
/// Operator implementation generator
template <op_id id, op_type ot, typename L, typename R> struct op_ {
- template <typename base, typename holder> void execute(pybind::class_<base, holder> &class_, const char *doc, return_value_policy policy) const {
- typedef typename std::conditional<std::is_same<L, self_t>::value, base, L>::type L_type;
- typedef typename std::conditional<std::is_same<R, self_t>::value, base, R>::type R_type;
- typedef op_impl<id, ot, base, L_type, R_type> op;
- class_.def(op::name(), &op::execute, doc, policy);
+ template <typename Base, typename Holder, typename... Extra> void execute(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
+ typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
+ typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
+ typedef op_impl<id, ot, Base, L_type, R_type> op;
+ class_.def(op::name(), &op::execute, std::forward<Extra>(extra)...);
}
- template <typename base, typename holder> void execute_cast(pybind::class_<base, holder> &class_, const char *doc, return_value_policy policy) const {
- typedef typename std::conditional<std::is_same<L, self_t>::value, base, L>::type L_type;
- typedef typename std::conditional<std::is_same<R, self_t>::value, base, R>::type R_type;
- typedef op_impl<id, ot, base, L_type, R_type> op;
- class_.def(op::name(), &op::execute_cast, doc, policy);
+ template <typename Base, typename Holder, typename... Extra> void execute_cast(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
+ typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
+ typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
+ typedef op_impl<id, ot, Base, L_type, R_type> op;
+ class_.def(op::name(), &op::execute_cast, std::forward<Extra>(extra)...);
}
};