From c6e0cdfa54bd42815a4e3c264e788d5f1529d6aa Mon Sep 17 00:00:00 2001 From: Jerry Gamache Date: Wed, 15 Jun 2016 12:48:15 -0400 Subject: [PATCH 1/2] Allow pybind11::arg to have 0, false, or "" as default values. --- example/example11.cpp | 1 + example/example11.py | 4 +++- example/example11.ref | 6 ++++++ include/pybind11/attr.h | 6 +++--- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/example/example11.cpp b/example/example11.cpp index 636a36ce1..4b3c6d08b 100644 --- a/example/example11.cpp +++ b/example/example11.cpp @@ -58,4 +58,5 @@ void init_ex11(py::module &m) { using namespace py::literals; m.def("kw_func_udl", &kw_func, "x"_a, "y"_a=300); + m.def("kw_func_udl_z", &kw_func, "x"_a, "y"_a=0); } diff --git a/example/example11.py b/example/example11.py index 33ed80be3..09ba13e6c 100755 --- a/example/example11.py +++ b/example/example11.py @@ -6,13 +6,14 @@ import pydoc sys.path.append('.') from example import kw_func, kw_func2, kw_func3, kw_func4, call_kw_func -from example import args_function, args_kwargs_function, kw_func_udl +from example import args_function, args_kwargs_function, kw_func_udl, kw_func_udl_z print(pydoc.render_doc(kw_func, "Help on %s")) print(pydoc.render_doc(kw_func2, "Help on %s")) print(pydoc.render_doc(kw_func3, "Help on %s")) print(pydoc.render_doc(kw_func4, "Help on %s")) print(pydoc.render_doc(kw_func_udl, "Help on %s")) +print(pydoc.render_doc(kw_func_udl_z, "Help on %s")) kw_func(5, 10) kw_func(5, y=10) @@ -42,3 +43,4 @@ args_function('arg1_value', 'arg2_value', 3) args_kwargs_function('arg1_value', 'arg2_value', arg3='arg3_value', arg4=4) kw_func_udl(x=5, y=10) +kw_func_udl_z(x=5) diff --git a/example/example11.ref b/example/example11.ref index e965187ea..a693b6ceb 100644 --- a/example/example11.ref +++ b/example/example11.ref @@ -23,6 +23,11 @@ Help on built-in function kw_func_udl in module example kkww__ffuunncc__uuddll(...) kw_func_udl(x : int, y : int = 300L) -> NoneType +Help on built-in function kw_func_udl_z in module example + +kkww__ffuunncc__uuddll__zz(...) + kw_func_udl_z(x : int, y : int = 0L) -> NoneType + kw_func(x=5, y=10) kw_func(x=5, y=10) kw_func(x=5, y=10) @@ -47,3 +52,4 @@ got keyword argument: arg3 -> arg3_value got keyword argument: arg4 -> 4 kw_func(x=5, y=10) +kw_func(x=5, y=0) diff --git a/include/pybind11/attr.h b/include/pybind11/attr.h index 10d848ae9..907e6ed6e 100644 --- a/include/pybind11/attr.h +++ b/include/pybind11/attr.h @@ -18,14 +18,14 @@ template struct arg_t; /// Annotation for keyword arguments struct arg { - constexpr arg(const char *name) : name(name) { } + constexpr explicit arg(const char *name) : name(name) { } template constexpr arg_t operator=(const T &value) const { return {name, value}; } template constexpr arg_t operator=(T const (&value)[N]) const { return operator=((const T *) value); - }; + } const char *name; }; @@ -40,7 +40,7 @@ template struct arg_t : public arg { inline namespace literals { /// String literal version of arg -constexpr arg operator"" _a(const char *name, size_t) { return {name}; } +constexpr arg operator"" _a(const char *name, size_t) { return {arg(name)}; } } /// Annotation for methods From b8f2d1886c2a09805df77e24f14a06a2fd856a80 Mon Sep 17 00:00:00 2001 From: Jerry Gamache Date: Wed, 15 Jun 2016 12:55:34 -0400 Subject: [PATCH 2/2] Remove unnecessary braces. --- include/pybind11/attr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/pybind11/attr.h b/include/pybind11/attr.h index 907e6ed6e..1e063a5f9 100644 --- a/include/pybind11/attr.h +++ b/include/pybind11/attr.h @@ -40,7 +40,7 @@ template struct arg_t : public arg { inline namespace literals { /// String literal version of arg -constexpr arg operator"" _a(const char *name, size_t) { return {arg(name)}; } +constexpr arg operator"" _a(const char *name, size_t) { return arg(name); } } /// Annotation for methods