Commit 31680e6f by Wenzel Jakob

Implicit conversion from enum to int for Python 3.8 (fix by @sizmailov)

parent 5fd187eb
...@@ -1566,6 +1566,10 @@ public: ...@@ -1566,6 +1566,10 @@ public:
#if PY_MAJOR_VERSION < 3 #if PY_MAJOR_VERSION < 3
def("__long__", [](Type value) { return (Scalar) value; }); def("__long__", [](Type value) { return (Scalar) value; });
#endif #endif
#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 8
def("__index__", [](Type value) { return (Scalar) value; });
#endif
cpp_function setstate( cpp_function setstate(
[](Type &value, Scalar arg) { value = static_cast<Type>(arg); }, [](Type &value, Scalar arg) { value = static_cast<Type>(arg); },
is_method(*this)); is_method(*this));
......
...@@ -192,15 +192,12 @@ def test_binary_operators(): ...@@ -192,15 +192,12 @@ def test_binary_operators():
def test_enum_to_int(): def test_enum_to_int():
import sys m.test_enum_to_int(m.Flags.Read)
# Implicit conversion to integers is deprecated in Python >= 3.8 m.test_enum_to_int(m.ClassWithUnscopedEnum.EMode.EFirstMode)
if sys.version_info < (3, 8): m.test_enum_to_uint(m.Flags.Read)
m.test_enum_to_int(m.Flags.Read) m.test_enum_to_uint(m.ClassWithUnscopedEnum.EMode.EFirstMode)
m.test_enum_to_int(m.ClassWithUnscopedEnum.EMode.EFirstMode) m.test_enum_to_long_long(m.Flags.Read)
m.test_enum_to_uint(m.Flags.Read) m.test_enum_to_long_long(m.ClassWithUnscopedEnum.EMode.EFirstMode)
m.test_enum_to_uint(m.ClassWithUnscopedEnum.EMode.EFirstMode)
m.test_enum_to_long_long(m.Flags.Read)
m.test_enum_to_long_long(m.ClassWithUnscopedEnum.EMode.EFirstMode)
def test_duplicate_enum_name(): def test_duplicate_enum_name():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment