diff --git a/icu4c/source/common/charstr.cpp b/icu4c/source/common/charstr.cpp
index c792181378e..27f53f82fa7 100644
--- a/icu4c/source/common/charstr.cpp
+++ b/icu4c/source/common/charstr.cpp
@@ -15,6 +15,7 @@
*/
#include "unicode/utypes.h"
+#include "unicode/putil.h"
#include "charstr.h"
#include "cmemory.h"
#include "cstring.h"
diff --git a/icu4c/source/common/locdspnm.cpp b/icu4c/source/common/locdspnm.cpp
index a17478ce6d8..c577da5dd86 100644
--- a/icu4c/source/common/locdspnm.cpp
+++ b/icu4c/source/common/locdspnm.cpp
@@ -13,6 +13,7 @@
#include "unicode/locdspnm.h"
#include "unicode/simpleformatter.h"
+#include "unicode/ucasemap.h"
#include "unicode/ures.h"
#include "unicode/udisplaycontext.h"
#include "unicode/brkiter.h"
diff --git a/icu4c/source/common/locid.cpp b/icu4c/source/common/locid.cpp
index d2781db95bd..56dd0f55afe 100644
--- a/icu4c/source/common/locid.cpp
+++ b/icu4c/source/common/locid.cpp
@@ -33,6 +33,7 @@
#include "unicode/locid.h"
+#include "unicode/strenum.h"
#include "unicode/uloc.h"
#include "putilimp.h"
#include "mutex.h"
diff --git a/icu4c/source/common/ucnv_ext.cpp b/icu4c/source/common/ucnv_ext.cpp
index f8605187240..1322b616fda 100644
--- a/icu4c/source/common/ucnv_ext.cpp
+++ b/icu4c/source/common/ucnv_ext.cpp
@@ -23,6 +23,7 @@
#if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION
#include "unicode/uset.h"
+#include "unicode/ustring.h"
#include "ucnv_bld.h"
#include "ucnv_cnv.h"
#include "ucnv_ext.h"
diff --git a/icu4c/source/common/unicode/locid.h b/icu4c/source/common/unicode/locid.h
index a8ddb7f32c9..63d85ed6afe 100644
--- a/icu4c/source/common/unicode/locid.h
+++ b/icu4c/source/common/unicode/locid.h
@@ -33,10 +33,8 @@
#include "unicode/utypes.h"
#include "unicode/uobject.h"
-#include "unicode/unistr.h"
#include "unicode/putil.h"
#include "unicode/uloc.h"
-#include "unicode/strenum.h"
/**
* \file
@@ -48,6 +46,9 @@ U_NAMESPACE_BEGIN
// Forward Declarations
void U_CALLCONV locale_available_init(); /**< @internal */
+class StringEnumeration;
+class UnicodeString;
+
/**
* A Locale
object represents a specific geographical, political,
* or cultural region. An operation that requires a Locale
to perform
diff --git a/icu4c/source/common/unicode/uenum.h b/icu4c/source/common/unicode/uenum.h
index 8da1bd45937..0e5301ad842 100644
--- a/icu4c/source/common/unicode/uenum.h
+++ b/icu4c/source/common/unicode/uenum.h
@@ -23,7 +23,9 @@
#include "unicode/localpointer.h"
#if U_SHOW_CPLUSPLUS_API
-#include "unicode/strenum.h"
+U_NAMESPACE_BEGIN
+class StringEnumeration;
+U_NAMESPACE_END
#endif
/**
diff --git a/icu4c/source/i18n/affixpatternparser.cpp b/icu4c/source/i18n/affixpatternparser.cpp
index 2ca22a15003..3e90882f782 100644
--- a/icu4c/source/i18n/affixpatternparser.cpp
+++ b/icu4c/source/i18n/affixpatternparser.cpp
@@ -13,7 +13,9 @@
#include "unicode/dcfmtsym.h"
#include "unicode/plurrule.h"
+#include "unicode/strenum.h"
#include "unicode/ucurr.h"
+#include "unicode/ustring.h"
#include "affixpatternparser.h"
#include "charstr.h"
#include "precision.h"
diff --git a/icu4c/source/i18n/currpinf.cpp b/icu4c/source/i18n/currpinf.cpp
index 5140b5e7f74..11b890b29d9 100644
--- a/icu4c/source/i18n/currpinf.cpp
+++ b/icu4c/source/i18n/currpinf.cpp
@@ -20,6 +20,7 @@
#include "unicode/locid.h"
#include "unicode/plurrule.h"
+#include "unicode/strenum.h"
#include "unicode/ures.h"
#include "unicode/numsys.h"
#include "cstring.h"
diff --git a/icu4c/source/i18n/decimfmt.cpp b/icu4c/source/i18n/decimfmt.cpp
index f03143ade42..75525bb4b3b 100644
--- a/icu4c/source/i18n/decimfmt.cpp
+++ b/icu4c/source/i18n/decimfmt.cpp
@@ -49,6 +49,7 @@
#include "unicode/utf16.h"
#include "unicode/numsys.h"
#include "unicode/localpointer.h"
+#include "unicode/ustring.h"
#include "uresimp.h"
#include "ucurrimp.h"
#include "charstr.h"
diff --git a/icu4c/source/i18n/plurrule_impl.h b/icu4c/source/i18n/plurrule_impl.h
index c6e4767a096..1a9129a0ff8 100644
--- a/icu4c/source/i18n/plurrule_impl.h
+++ b/icu4c/source/i18n/plurrule_impl.h
@@ -24,6 +24,7 @@
#include "unicode/format.h"
#include "unicode/locid.h"
#include "unicode/parseerr.h"
+#include "unicode/strenum.h"
#include "unicode/ures.h"
#include "uvector.h"
#include "hash.h"
diff --git a/icu4c/source/i18n/rbnf.cpp b/icu4c/source/i18n/rbnf.cpp
index fc4fd43a7bf..94e870e4021 100644
--- a/icu4c/source/i18n/rbnf.cpp
+++ b/icu4c/source/i18n/rbnf.cpp
@@ -27,6 +27,7 @@
#include "unicode/udata.h"
#include "unicode/udisplaycontext.h"
#include "unicode/brkiter.h"
+#include "unicode/ucasemap.h"
#include "nfrs.h"
#include "cmemory.h"
diff --git a/icu4c/source/i18n/reldtfmt.cpp b/icu4c/source/i18n/reldtfmt.cpp
index 00cafc84e4c..d8fec031b7c 100644
--- a/icu4c/source/i18n/reldtfmt.cpp
+++ b/icu4c/source/i18n/reldtfmt.cpp
@@ -20,7 +20,7 @@
#include "unicode/udisplaycontext.h"
#include "unicode/uchar.h"
#include "unicode/brkiter.h"
-
+#include "unicode/ucasemap.h"
#include "reldtfmt.h"
#include "cmemory.h"
#include "uresimp.h"
diff --git a/icu4c/source/i18n/tzfmt.cpp b/icu4c/source/i18n/tzfmt.cpp
index 161675a5d16..6e30815a759 100644
--- a/icu4c/source/i18n/tzfmt.cpp
+++ b/icu4c/source/i18n/tzfmt.cpp
@@ -14,8 +14,10 @@
#include "unicode/calendar.h"
#include "unicode/tzfmt.h"
#include "unicode/numsys.h"
+#include "unicode/strenum.h"
#include "unicode/uchar.h"
#include "unicode/udat.h"
+#include "unicode/ustring.h"
#include "tzgnames.h"
#include "cmemory.h"
#include "cstring.h"
diff --git a/icu4c/source/i18n/tzgnames.cpp b/icu4c/source/i18n/tzgnames.cpp
index 4fc726ea54d..cabd8ab8fc5 100644
--- a/icu4c/source/i18n/tzgnames.cpp
+++ b/icu4c/source/i18n/tzgnames.cpp
@@ -18,6 +18,7 @@
#include "unicode/rbtz.h"
#include "unicode/simpleformatter.h"
#include "unicode/simpletz.h"
+#include "unicode/strenum.h"
#include "unicode/vtzone.h"
#include "cmemory.h"
diff --git a/icu4c/source/i18n/tznames_impl.cpp b/icu4c/source/i18n/tznames_impl.cpp
index f52d5c23ac3..7cb11c3903f 100644
--- a/icu4c/source/i18n/tznames_impl.cpp
+++ b/icu4c/source/i18n/tznames_impl.cpp
@@ -15,6 +15,7 @@
#if !UCONFIG_NO_FORMATTING
+#include "unicode/strenum.h"
#include "unicode/ustring.h"
#include "unicode/timezone.h"
diff --git a/icu4c/source/i18n/unicode/alphaindex.h b/icu4c/source/i18n/unicode/alphaindex.h
index c7b361ff948..e870713a606 100644
--- a/icu4c/source/i18n/unicode/alphaindex.h
+++ b/icu4c/source/i18n/unicode/alphaindex.h
@@ -15,6 +15,7 @@
#include "unicode/utypes.h"
#include "unicode/uobject.h"
#include "unicode/locid.h"
+#include "unicode/unistr.h"
#if !UCONFIG_NO_COLLATION
diff --git a/icu4c/source/i18n/unicode/coleitr.h b/icu4c/source/i18n/unicode/coleitr.h
index 4feaa1b55a5..aa93bdb8b99 100644
--- a/icu4c/source/i18n/unicode/coleitr.h
+++ b/icu4c/source/i18n/unicode/coleitr.h
@@ -47,6 +47,7 @@ U_NAMESPACE_BEGIN
struct CollationData;
+class CharacterIterator;
class CollationIterator;
class RuleBasedCollator;
class UCollationPCE;
diff --git a/icu4c/source/i18n/unicode/dcfmtsym.h b/icu4c/source/i18n/unicode/dcfmtsym.h
index 946227addb7..f13cb16a99c 100644
--- a/icu4c/source/i18n/unicode/dcfmtsym.h
+++ b/icu4c/source/i18n/unicode/dcfmtsym.h
@@ -35,6 +35,7 @@
#include "unicode/uobject.h"
#include "unicode/locid.h"
#include "unicode/unum.h"
+#include "unicode/unistr.h"
/**
* \file
diff --git a/icu4c/source/i18n/unicode/reldatefmt.h b/icu4c/source/i18n/unicode/reldatefmt.h
index e91d20667e3..76fe0ed9016 100644
--- a/icu4c/source/i18n/unicode/reldatefmt.h
+++ b/icu4c/source/i18n/unicode/reldatefmt.h
@@ -230,6 +230,7 @@ typedef enum UDateDirection {
U_NAMESPACE_BEGIN
+class BreakIterator;
class RelativeDateTimeCacheData;
class SharedNumberFormat;
class SharedPluralRules;
diff --git a/icu4c/source/i18n/zonemeta.cpp b/icu4c/source/i18n/zonemeta.cpp
index fdf333c3712..635766451a1 100644
--- a/icu4c/source/i18n/zonemeta.cpp
+++ b/icu4c/source/i18n/zonemeta.cpp
@@ -17,7 +17,7 @@
#include "unicode/ustring.h"
#include "unicode/putil.h"
#include "unicode/simpletz.h"
-
+#include "unicode/strenum.h"
#include "umutex.h"
#include "uvector.h"
#include "cmemory.h"
diff --git a/icu4c/source/test/intltest/apicoll.cpp b/icu4c/source/test/intltest/apicoll.cpp
index ff37a69d3f9..2ca8bdf1974 100644
--- a/icu4c/source/test/intltest/apicoll.cpp
+++ b/icu4c/source/test/intltest/apicoll.cpp
@@ -41,6 +41,7 @@
#include "apicoll.h"
#include "unicode/chariter.h"
#include "unicode/schriter.h"
+#include "unicode/strenum.h"
#include "unicode/ustring.h"
#include "unicode/ucol.h"
diff --git a/icu4c/source/test/intltest/locnmtst.cpp b/icu4c/source/test/intltest/locnmtst.cpp
index ab62c1f8029..c0e8d37acaf 100644
--- a/icu4c/source/test/intltest/locnmtst.cpp
+++ b/icu4c/source/test/intltest/locnmtst.cpp
@@ -7,6 +7,7 @@
*********************************************************************/
#include "locnmtst.h"
+#include "unicode/ustring.h"
#include "cstring.h"
/*
diff --git a/icu4c/source/test/intltest/measfmttest.cpp b/icu4c/source/test/intltest/measfmttest.cpp
index 510146b0146..d9d602d769d 100644
--- a/icu4c/source/test/intltest/measfmttest.cpp
+++ b/icu4c/source/test/intltest/measfmttest.cpp
@@ -21,8 +21,10 @@
#include "unicode/measfmt.h"
#include "unicode/measure.h"
#include "unicode/measunit.h"
+#include "unicode/strenum.h"
#include "unicode/tmunit.h"
#include "unicode/plurrule.h"
+#include "unicode/ustring.h"
#include "charstr.h"
#include "cstr.h"
#include "unicode/reldatefmt.h"
diff --git a/icu4c/source/test/intltest/numfmtst.cpp b/icu4c/source/test/intltest/numfmtst.cpp
index 015836b8399..f1ce9e64e07 100644
--- a/icu4c/source/test/intltest/numfmtst.cpp
+++ b/icu4c/source/test/intltest/numfmtst.cpp
@@ -22,6 +22,7 @@
#include "unicode/ustring.h"
#include "unicode/measfmt.h"
#include "unicode/curramt.h"
+#include "unicode/strenum.h"
#include "digitlst.h"
#include "textfile.h"
#include "tokiter.h"
diff --git a/icu4c/source/test/intltest/tmsgfmt.cpp b/icu4c/source/test/intltest/tmsgfmt.cpp
index 44a50b8cdef..97aee345588 100644
--- a/icu4c/source/test/intltest/tmsgfmt.cpp
+++ b/icu4c/source/test/intltest/tmsgfmt.cpp
@@ -32,6 +32,7 @@
#include "unicode/messagepattern.h"
#include "unicode/selfmt.h"
#include "unicode/gregocal.h"
+#include "unicode/strenum.h"
#include
void
diff --git a/icu4c/source/test/intltest/tzrulets.cpp b/icu4c/source/test/intltest/tzrulets.cpp
index d98ed521b00..3808c143bec 100644
--- a/icu4c/source/test/intltest/tzrulets.cpp
+++ b/icu4c/source/test/intltest/tzrulets.cpp
@@ -18,6 +18,7 @@
#include "unicode/tzrule.h"
#include "unicode/calendar.h"
#include "unicode/gregocal.h"
+#include "unicode/strenum.h"
#include "unicode/ucal.h"
#include "unicode/unistr.h"
#include "unicode/ustring.h"
diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp
index 96be030ac45..50eb1911c25 100644
--- a/icu4c/source/test/intltest/ustrtest.cpp
+++ b/icu4c/source/test/intltest/ustrtest.cpp
@@ -13,6 +13,7 @@
#include "unicode/uchar.h"
#include "unicode/ustring.h"
#include "unicode/locid.h"
+#include "unicode/strenum.h"
#include "unicode/ucnv.h"
#include "unicode/uenum.h"
#include "unicode/utf16.h"
diff --git a/icu4c/source/tools/gendict/gendict.cpp b/icu4c/source/tools/gendict/gendict.cpp
index 75c0bdd052e..c9f8907b7f5 100644
--- a/icu4c/source/tools/gendict/gendict.cpp
+++ b/icu4c/source/tools/gendict/gendict.cpp
@@ -22,6 +22,7 @@
#include "unicode/ucharstrie.h"
#include "unicode/bytestrie.h"
#include "unicode/ucnv.h"
+#include "unicode/ustring.h"
#include "unicode/utf16.h"
#include "charstr.h"