diff --git a/runtime/src/ANTLRInputStream.h b/runtime/src/ANTLRInputStream.h
index 3d85bed..813451c 100644
--- a/runtime/src/ANTLRInputStream.h
+++ b/runtime/src/ANTLRInputStream.h
@@ -16,7 +16,7 @@ namespace antlr4 {
protected:
/// The data being scanned.
// UTF-32
-#if defined(_MSC_VER) && _MSC_VER == 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
i32string _data; // Custom type for VS 2015.
#else
std::u32string _data;
diff --git a/runtime/src/UnbufferedCharStream.h b/runtime/src/UnbufferedCharStream.h
index b489f18..295804c 100644
--- a/runtime/src/UnbufferedCharStream.h
+++ b/runtime/src/UnbufferedCharStream.h
@@ -52,7 +52,7 @@ namespace antlr4 {
/// we keep adding to buffer. Otherwise, resets so
/// we start filling at index 0 again.
// UTF-32 encoded.
-#if defined(_MSC_VER) && _MSC_VER == 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
i32string _data; // Custom type for VS 2015.
#else
std::u32string _data;
diff --git a/runtime/src/antlr4-common.h b/runtime/src/antlr4-common.h
index 197fd6d..8357b3e 100644
--- a/runtime/src/antlr4-common.h
+++ b/runtime/src/antlr4-common.h
@@ -52,7 +52,7 @@
typedef __int32 ssize_t;
#endif
- #if _MSC_VER == 1900
+ #if _MSC_VER >= 1900
// VS 2015 has a known bug when using std::codecvt_utf8
// so we have to temporarily use __int32 instead.
// https://connect.microsoft.com/VisualStudio/feedback/details/1403302/unresolved-external-when-using-codecvt-utf8
diff --git a/runtime/src/support/StringUtils.h b/runtime/src/support/StringUtils.h
index cb751a7..be14bbb 100644
--- a/runtime/src/support/StringUtils.h
+++ b/runtime/src/support/StringUtils.h
@@ -10,7 +10,7 @@
namespace antlrcpp {
// For all conversions utf8 <-> utf32.
// VS 2015 has a bug in std::codecvt_utf8 (VS 2013 works fine).
-#if defined(_MSC_VER) && _MSC_VER == 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
static std::wstring_convert, __int32> utfConverter;
#else
static std::wstring_convert, char32_t> utfConverter;