Skip to content

Commit 9136bac

Browse files
committed
Disable NaN render as numpy.nan for older compilers
std::isnan is not available on gcc-4.8
1 parent e76c308 commit 9136bac

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

include/pybind11/cast.h

+2
Original file line numberDiff line numberDiff line change
@@ -1871,6 +1871,7 @@ struct arg_v : arg {
18711871
arg_v(const arg &base, T &&x, const char *descr = nullptr)
18721872
: arg_v(arg(base), std::forward<T>(x), descr) { }
18731873

1874+
#if __cplusplus >= 201103L
18741875
#define ARGV_NAN_DEFAULT_OVERLOAD(FLOAT_TYPE) \
18751876
arg_v(const arg &base, FLOAT_TYPE x) \
18761877
: arg_v(arg(base), x, std::isnan(x) ? "numpy.nan" : nullptr) {}
@@ -1880,6 +1881,7 @@ struct arg_v : arg {
18801881
ARGV_NAN_DEFAULT_OVERLOAD(long double)
18811882

18821883
#undef ARGV_NAN_DEFAULT_OVERLOAD
1884+
#endif
18831885

18841886
/// Same as `arg::noconvert()`, but returns *this as arg_v&, not arg&
18851887
arg_v &noconvert(bool flag = true) { arg::noconvert(flag); return *this; }

tests/test_kwargs_and_defaults.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ TEST_SUBMODULE(kwargs_and_defaults, m) {
3535
m.def("kw_func_udl_z", kw_func, "x"_a, "y"_a=0);
3636

3737
m.def("kw_func_float_123", kw_func_float, "x"_a=1, "y"_a=2, "z"_a=3);
38+
#if __cplusplus >= 201103L
3839
m.def("kw_func_float_nan", kw_func_float,
3940
"x"_a=std::numeric_limits<float>::quiet_NaN(),
4041
"y"_a=std::numeric_limits<double>::quiet_NaN(),
4142
"z"_a=std::numeric_limits<long double>::quiet_NaN());
42-
43+
#endif
4344

4445
// test_args_and_kwargs
4546
m.def("args_function", [](py::args args) -> py::tuple {

tests/test_kwargs_and_defaults.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ def test_function_signatures(doc):
1111
assert doc(m.kw_func_udl) == "kw_func_udl(x: int, y: int = 300) -> str"
1212
assert doc(m.kw_func_udl_z) == "kw_func_udl_z(x: int, y: int = 0) -> str"
1313
assert doc(m.kw_func_float_123) == "kw_func_float_123(x: float = 1, y: float = 2, z: float = 3) -> str"
14-
assert doc(m.kw_func_float_nan) == "kw_func_float_nan(x: float = numpy.nan, y: float = numpy.nan, z: float = numpy.nan) -> str"
14+
if hasattr(m, "kw_func_float_nan"):
15+
assert doc(m.kw_func_float_nan) == "kw_func_float_nan" \
16+
"(x: float = numpy.nan, y: float = numpy.nan, z: float = numpy.nan) -> str"
1517
assert doc(m.args_function) == "args_function(*args) -> tuple"
1618
assert doc(m.args_kwargs_function) == "args_kwargs_function(*args, **kwargs) -> tuple"
1719
assert doc(m.KWClass.foo0) == \

0 commit comments

Comments
 (0)