diff --git a/stdlib/@tests/test_cases/ctypes/check_pointer.py b/stdlib/@tests/test_cases/ctypes/check_pointer.py new file mode 100644 index 000000000000..55f6e1365e57 --- /dev/null +++ b/stdlib/@tests/test_cases/ctypes/check_pointer.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +import ctypes +from typing import Type +from typing_extensions import assert_type + +assert_type(ctypes.POINTER(None), Type[ctypes.c_void_p]) +assert_type(ctypes.POINTER(ctypes.c_int), Type[ctypes._Pointer[ctypes.c_int]]) diff --git a/stdlib/_ctypes.pyi b/stdlib/_ctypes.pyi index 5313195a0ba8..f4d26d05323a 100644 --- a/stdlib/_ctypes.pyi +++ b/stdlib/_ctypes.pyi @@ -2,7 +2,7 @@ import sys from _typeshed import ReadableBuffer, WriteableBuffer from abc import abstractmethod from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence -from ctypes import CDLL, ArgumentError as ArgumentError +from ctypes import CDLL, ArgumentError as ArgumentError, c_void_p from typing import Any, ClassVar, Generic, TypeVar, overload from typing_extensions import Self, TypeAlias @@ -99,6 +99,9 @@ class _Pointer(_PointerLike, _CData, Generic[_CT]): def __getitem__(self, key: slice, /) -> list[Any]: ... def __setitem__(self, key: int, value: Any, /) -> None: ... +@overload +def POINTER(type: None, /) -> type[c_void_p]: ... +@overload def POINTER(type: type[_CT], /) -> type[_Pointer[_CT]]: ... def pointer(obj: _CT, /) -> _Pointer[_CT]: ...