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)...);
     }
 };