Regressed by https://github.com/unicode-org/icu/commit/0101e2632c34
Fixed by https://github.com/ovalhub/pyicu/commit/b42d6a754729

measureunit.cpp:466:5: error: unknown type name 'NoUnit'
    NoUnit *object;
    ^
measureunit.cpp:480:45: error: unexpected namespace name 'NoUnit': expected expression
DECLARE_TYPE(NoUnit, t_nounit, MeasureUnit, NoUnit,
                                            ^
measureunit.cpp:480:1: error: use of undeclared identifier 'object'
DECLARE_TYPE(NoUnit, t_nounit, MeasureUnit, NoUnit,
^
./macros.h:199:33: note: expanded from macro 'DECLARE_TYPE'
PyObject *wrap_##name(icuClass *object, int flags)                        \
                                ^
measureunit.cpp:480:1: error: expected '(' for function-style cast or type construction
DECLARE_TYPE(NoUnit, t_nounit, MeasureUnit, NoUnit,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./macros.h:199:45: note: expanded from macro 'DECLARE_TYPE'
PyObject *wrap_##name(icuClass *object, int flags)                        \
                                        ~~~ ^
measureunit.cpp:480:1: error: expected ';' after top level declarator
./macros.h:199:75: note: expanded from macro 'DECLARE_TYPE'
PyObject *wrap_##name(icuClass *object, int flags)                        \
                                                                          ^
measureunit.cpp:956:23: error: unexpected namespace name 'NoUnit': expected expression
  return wrap_NoUnit((NoUnit *) NoUnit::base().clone(), T_OWNED);
                      ^
measureunit.cpp:956:31: error: expected expression
  return wrap_NoUnit((NoUnit *) NoUnit::base().clone(), T_OWNED);
                              ^
measureunit.cpp:961:25: error: unexpected namespace name 'NoUnit': expected expression
    return wrap_NoUnit((NoUnit *) NoUnit::percent().clone(), T_OWNED);
                        ^
measureunit.cpp:961:33: error: expected expression
    return wrap_NoUnit((NoUnit *) NoUnit::percent().clone(), T_OWNED);
                                ^
measureunit.cpp:966:25: error: unexpected namespace name 'NoUnit': expected expression
    return wrap_NoUnit((NoUnit *) NoUnit::permille().clone(), T_OWNED);
                        ^
measureunit.cpp:966:33: error: expected expression
    return wrap_NoUnit((NoUnit *) NoUnit::permille().clone(), T_OWNED);
                                ^
measureunit.cpp:1193:19: error: unexpected namespace name 'NoUnit': expected expression
    REGISTER_TYPE(NoUnit, m);
                  ^

--- measureunit.cpp.orig	2019-10-03 17:11:03 UTC
+++ measureunit.cpp
@@ -463,7 +463,7 @@ DECLARE_TYPE(Measure, t_measure, UObject, Measure, abs
 
 class t_nounit : public _wrapper {
 public:
-    NoUnit *object;
+    MeasureUnit *object;
 };
 
 static PyObject *t_nounit_base(PyTypeObject *type);
@@ -477,7 +477,7 @@ static PyMethodDef t_nounit_methods[] = {
     { NULL, NULL, 0, NULL }
 };
 
-DECLARE_TYPE(NoUnit, t_nounit, MeasureUnit, NoUnit,
+DECLARE_TYPE(NoUnit, t_nounit, MeasureUnit, MeasureUnit,
              abstract_init, NULL);
 
 #endif
@@ -953,17 +953,17 @@ DEFINE_RICHCMP(Measure, t_measure);
 
 static PyObject *t_nounit_base(PyTypeObject *type)
 {
-  return wrap_NoUnit((NoUnit *) NoUnit::base().clone(), T_OWNED);
+  return wrap_NoUnit((MeasureUnit *) NoUnit::base().clone(), T_OWNED);
 }
 
 static PyObject *t_nounit_percent(PyTypeObject *type)
 {
-    return wrap_NoUnit((NoUnit *) NoUnit::percent().clone(), T_OWNED);
+    return wrap_NoUnit((MeasureUnit *) NoUnit::percent().clone(), T_OWNED);
 }
 
 static PyObject *t_nounit_permille(PyTypeObject *type)
 {
-    return wrap_NoUnit((NoUnit *) NoUnit::permille().clone(), T_OWNED);
+    return wrap_NoUnit((MeasureUnit *) NoUnit::permille().clone(), T_OWNED);
 }
 
 #endif
@@ -1190,7 +1190,7 @@ void _init_measureunit(PyObject *m)
     INSTALL_TYPE(MeasureUnit, m);
     INSTALL_TYPE(Measure, m);
 #if U_ICU_VERSION_HEX >= VERSION_HEX(60, 0, 0)
-    REGISTER_TYPE(NoUnit, m);
+    INSTALL_STRUCT(NoUnit, m);
 #endif
     REGISTER_TYPE(CurrencyUnit, m);
     REGISTER_TYPE(CurrencyAmount, m);
