Fix scoped enums and add scoped enum example
PR #309 broke scoped enums, which failed to compile because the added:
value == value2
comparison isn't valid for a scoped enum (they aren't implicitly
convertible to the underlying type). This commit fixes it by
explicitly converting the enum value to its underlying type before
doing the comparison.
It also adds a scoped enum example to the constants-and-functions
example that triggers the problem fixed in this commit.
diff --git a/example/example-constants-and-functions.cpp b/example/example-constants-and-functions.cpp
index b71856c..d7f8ad1 100644
--- a/example/example-constants-and-functions.cpp
+++ b/example/example-constants-and-functions.cpp
@@ -14,6 +14,11 @@
ESecondEntry
};
+enum class ECMyEnum {
+ Two = 2,
+ Three
+};
+
class ExampleWithEnum {
public:
enum EMode {
@@ -41,6 +46,10 @@
return (float) i / 2.f;
}
+void test_ecenum(ECMyEnum z) {
+ std::cout << "test_ecenum(ECMyEnum::" << (z == ECMyEnum::Two ? "Two" : "Three") << ")" << std::endl;
+}
+
py::bytes return_bytes() {
const char *data = "\x01\x00\x02\x00";
return std::string(data, 4);
@@ -56,6 +65,7 @@
m.def("test_function", &test_function1);
m.def("test_function", &test_function2);
m.def("test_function", &test_function3);
+ m.def("test_ecenum", &test_ecenum);
m.attr("some_constant") = py::int_(14);
py::enum_<EMyEnumeration>(m, "EMyEnumeration")
@@ -63,6 +73,11 @@
.value("ESecondEntry", ESecondEntry)
.export_values();
+ py::enum_<ECMyEnum>(m, "ECMyEnum")
+ .value("Two", ECMyEnum::Two)
+ .value("Three", ECMyEnum::Three)
+ ;
+
py::class_<ExampleWithEnum> exenum_class(m, "ExampleWithEnum");
exenum_class.def_static("test_function", &ExampleWithEnum::test_function);
py::enum_<ExampleWithEnum::EMode>(exenum_class, "EMode")