Skip to content

Commit

Permalink
feat(types) Adds special Case for empty C++ tuple type annotation (#5214
Browse files Browse the repository at this point in the history
)

* add special case and unit test

* add newline
  • Loading branch information
InvincibleRMC authored Jun 30, 2024
1 parent 51c2aa1 commit d805e99
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
7 changes: 7 additions & 0 deletions include/pybind11/cast.h
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,13 @@ class type_caster<std::pair<T1, T2>> : public tuple_caster<std::pair, T1, T2> {}
template <typename... Ts>
class type_caster<std::tuple<Ts...>> : public tuple_caster<std::tuple, Ts...> {};

template <>
class type_caster<std::tuple<>> : public tuple_caster<std::tuple> {
public:
// PEP 484 specifies this syntax for an empty tuple
static constexpr auto name = const_name("tuple[()]");
};

/// Helper class which abstracts away certain actions. Users can provide specializations for
/// custom holders, but it's only necessary if the type has a non-standard interface.
template <typename T>
Expand Down
2 changes: 2 additions & 0 deletions tests/test_builtin_casters.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,8 @@ def test_tuple(doc):
"""
)

assert doc(m.empty_tuple) == """empty_tuple() -> tuple[()]"""

assert m.rvalue_pair() == ("rvalue", "rvalue")
assert m.lvalue_pair() == ("lvalue", "lvalue")
assert m.rvalue_tuple() == ("rvalue", "rvalue", "rvalue")
Expand Down

0 comments on commit d805e99

Please sign in to comment.