[Scummvm-git-logs] scummvm master -> 5bf1a12082d0f900b7a17c9876daed6b5af3f332

bluegr noreply at scummvm.org
Sat Jul 26 05:24:37 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
5bf1a12082 BUILD: Effectively drop support for MSVC < 2015


Commit: 5bf1a12082d0f900b7a17c9876daed6b5af3f332
    https://github.com/scummvm/scummvm/commit/5bf1a12082d0f900b7a17c9876daed6b5af3f332
Author: Donovan Watteau (contrib at dwatteau.fr)
Date: 2025-07-26T08:24:33+03:00

Commit Message:
BUILD: Effectively drop support for MSVC < 2015

It's been documented on the wiki for nearly 3 years that MSVC 2015 is
the oldest MSVC release being supported.

AFAICS no-one is actively using any older version nowadays, and C++11
support in MSVC 2013 is incomplete anyway:
https://learn.microsoft.com/en-us/previous-versions/hh567368(v=vs.140)

This means that some old MSVC hacks can be dropped now (not touching
any vendored or generated code having such hacks, though).

Changed paths:
  R backends/audiocd/win32/msvc/ntddcdrm.h
    backends/audiocd/win32/win32-audiocd.cpp
    common/scummsys.h
    common/str.cpp
    devtools/create_project/create_project.cpp
    devtools/create_project/create_project.h


diff --git a/backends/audiocd/win32/msvc/ntddcdrm.h b/backends/audiocd/win32/msvc/ntddcdrm.h
deleted file mode 100644
index 02ff609259f..00000000000
--- a/backends/audiocd/win32/msvc/ntddcdrm.h
+++ /dev/null
@@ -1,362 +0,0 @@
-/**
- * @file ntddcdrm.h
- * Copyright 2012, 2013 MinGW.org project
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-/* Created by Casper S. Hornstrup <chorns at users.sourceforge.net> */
-#ifndef __NTDDCDRM_H
-#define __NTDDCDRM_H
-#if 0 // Added to make MSVC happy.
-#pragma GCC system_header
-#include <_mingw.h>
-#endif
-
-/*
- * CDROM IOCTL interface.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if 0 // Added to make MSVC happy.
-#include "ntddk.h"
-#include "ntddstor.h"
-#endif
-
-#define IOCTL_CDROM_BASE                  FILE_DEVICE_CD_ROM
-
-#define IOCTL_CDROM_CHECK_VERIFY \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_FIND_NEW_DEVICES \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_GET_CONTROL \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_GET_DRIVE_GEOMETRY \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_GET_LAST_SESSION \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_GET_VOLUME \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_PAUSE_AUDIO \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_PLAY_AUDIO_MSF \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_RAW_READ \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT,  FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_READ_Q_CHANNEL \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_READ_TOC \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_READ_TOC_EX \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_RESUME_AUDIO \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_SEEK_AUDIO_MSF \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_SET_VOLUME \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_SIMBAD \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x1003, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_CDROM_STOP_AUDIO \
-  CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-
-#define MAXIMUM_NUMBER_TRACKS             100
-#define MAXIMUM_CDROM_SIZE                804
-#define MINIMUM_CDROM_READ_TOC_EX_SIZE    2
-
-typedef struct _TRACK_DATA {
-  UCHAR  Reserved;
-  UCHAR  Control : 4;
-  UCHAR  Adr : 4;
-  UCHAR  TrackNumber;
-  UCHAR  Reserved1;
-  UCHAR  Address[4];
-} TRACK_DATA, *PTRACK_DATA;
-
-/* CDROM_DISK_DATA.DiskData flags */
-#define CDROM_DISK_AUDIO_TRACK            0x00000001
-#define CDROM_DISK_DATA_TRACK             0x00000002
-
-typedef struct _CDROM_DISK_DATA {
-  ULONG  DiskData;
-} CDROM_DISK_DATA, *PCDROM_DISK_DATA;
-
-typedef struct _CDROM_PLAY_AUDIO_MSF {
-  UCHAR  StartingM;
-  UCHAR  StartingS;
-  UCHAR  StartingF;
-  UCHAR  EndingM;
-  UCHAR  EndingS;
-  UCHAR  EndingF;
-} CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF;
-
-/* CDROM_READ_TOC_EX.Format constants */
-#define CDROM_READ_TOC_EX_FORMAT_TOC      0x00
-#define CDROM_READ_TOC_EX_FORMAT_SESSION  0x01
-#define CDROM_READ_TOC_EX_FORMAT_FULL_TOC 0x02
-#define CDROM_READ_TOC_EX_FORMAT_PMA      0x03
-#define CDROM_READ_TOC_EX_FORMAT_ATIP     0x04
-#define CDROM_READ_TOC_EX_FORMAT_CDTEXT   0x05
-
-typedef struct _CDROM_READ_TOC_EX {
-  UCHAR  Format : 4;
-  UCHAR  Reserved1 : 3;
-  UCHAR  Msf : 1;
-  UCHAR  SessionTrack;
-  UCHAR  Reserved2;
-  UCHAR  Reserved3;
-} CDROM_READ_TOC_EX, *PCDROM_READ_TOC_EX;
-
-typedef struct _CDROM_SEEK_AUDIO_MSF {
-  UCHAR  M;
-  UCHAR  S;
-  UCHAR  F;
-} CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF;
-
-/* CDROM_SUB_Q_DATA_FORMAT.Format constants */
-#define IOCTL_CDROM_SUB_Q_CHANNEL         0x00
-#define IOCTL_CDROM_CURRENT_POSITION      0x01
-#define IOCTL_CDROM_MEDIA_CATALOG         0x02
-#define IOCTL_CDROM_TRACK_ISRC            0x03
-
-typedef struct _CDROM_SUB_Q_DATA_FORMAT {
-  UCHAR Format;
-  UCHAR Track;
-} CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT;
-
-typedef struct _CDROM_TOC {
-  UCHAR  Length[2];
-  UCHAR  FirstTrack;
-  UCHAR  LastTrack;
-  TRACK_DATA  TrackData[MAXIMUM_NUMBER_TRACKS];
-} CDROM_TOC, *PCDROM_TOC;
-
-#define CDROM_TOC_SIZE sizeof(CDROM_TOC)
-
-typedef struct _CDROM_TOC_ATIP_DATA_BLOCK {
-  UCHAR  CdrwReferenceSpeed : 3;
-  UCHAR  Reserved3 : 1;
-  UCHAR  WritePower : 3;
-  UCHAR  True1 : 1;
-  UCHAR  Reserved4 : 6;
-  UCHAR  UnrestrictedUse : 1;
-  UCHAR  Reserved5 : 1;
-  UCHAR  A3Valid : 1;
-  UCHAR  A2Valid : 1;
-  UCHAR  A1Valid : 1;
-  UCHAR  Reserved6 : 3;
-  UCHAR  IsCdrw : 1;
-  UCHAR  True2 : 1;
-  UCHAR  Reserved7;
-  UCHAR  LeadInMsf[3];
-  UCHAR  Reserved8;
-  UCHAR  LeadOutMsf[3];
-  UCHAR  Reserved9;
-  UCHAR  A1Values[3];
-  UCHAR  Reserved10;
-  UCHAR  A2Values[3];
-  UCHAR  Reserved11;
-  UCHAR  A3Values[3];
-  UCHAR  Reserved12;
-} CDROM_TOC_ATIP_DATA_BLOCK, *PCDROM_TOC_ATIP_DATA_BLOCK;
-
-#if 0 // Added to make MSVC happy.
-typedef struct _CDROM_TOC_ATIP_DATA {
-  UCHAR  Length[2];
-  UCHAR  Reserved1;
-  UCHAR  Reserved2;
-  CDROM_TOC_ATIP_DATA_BLOCK  Descriptors[0];
-  CDROM_TOC_ATIP_DATA_BLOCK  Descriptors[1];
-} CDROM_TOC_ATIP_DATA, *PCDROM_TOC_ATIP_DATA;
-#endif
-
-/* CDROM_TOC_CD_TEXT_DATA_BLOCK.PackType constants */
-#define CDROM_CD_TEXT_PACK_ALBUM_NAME 0x80
-#define CDROM_CD_TEXT_PACK_PERFORMER  0x81
-#define CDROM_CD_TEXT_PACK_SONGWRITER 0x82
-#define CDROM_CD_TEXT_PACK_COMPOSER   0x83
-#define CDROM_CD_TEXT_PACK_ARRANGER   0x84
-#define CDROM_CD_TEXT_PACK_MESSAGES   0x85
-#define CDROM_CD_TEXT_PACK_DISC_ID    0x86
-#define CDROM_CD_TEXT_PACK_GENRE      0x87
-#define CDROM_CD_TEXT_PACK_TOC_INFO   0x88
-#define CDROM_CD_TEXT_PACK_TOC_INFO2  0x89
-#define CDROM_CD_TEXT_PACK_UPC_EAN    0x8e
-#define CDROM_CD_TEXT_PACK_SIZE_INFO  0x8f
-
-#if 0 // Added to make MSVC happy.
-typedef struct _CDROM_TOC_CD_TEXT_DATA_BLOCK {
-  UCHAR  PackType;
-  UCHAR  TrackNumber : 7;
-  UCHAR  ExtensionFlag : 1;
-  UCHAR  SequenceNumber;
-  UCHAR  CharacterPosition : 4;
-  UCHAR  BlockNumber : 3;
-  UCHAR  Unicode : 1;
-  _ANONYMOUS_UNION union {
-	UCHAR  Text[12];
-	WCHAR  WText[6];
-  } DUMMYUNIONNAME;
-  UCHAR  CRC[2];
-} CDROM_TOC_CD_TEXT_DATA_BLOCK, *PCDROM_TOC_CD_TEXT_DATA_BLOCK;
-
-typedef struct _CDROM_TOC_CD_TEXT_DATA {
-  UCHAR  Length[2];
-  UCHAR  Reserved1;
-  UCHAR  Reserved2;
-  CDROM_TOC_CD_TEXT_DATA_BLOCK  Descriptors[0];
-} CDROM_TOC_CD_TEXT_DATA, *PCDROM_TOC_CD_TEXT_DATA;
-#endif
-
-/* CDROM_TOC_FULL_TOC_DATA_BLOCK.Adr constants */
-#define ADR_NO_MODE_INFORMATION           0x0
-#define ADR_ENCODES_CURRENT_POSITION      0x1
-#define ADR_ENCODES_MEDIA_CATALOG         0x2
-#define ADR_ENCODES_ISRC                  0x3
-
-typedef struct _CDROM_TOC_FULL_TOC_DATA_BLOCK {
-  UCHAR  SessionNumber;
-  UCHAR  Control : 4;
-  UCHAR  Adr : 4;
-  UCHAR  Reserved1;
-  UCHAR  Point;
-  UCHAR  MsfExtra[3];
-  UCHAR  Zero;
-  UCHAR  Msf[3];
-} CDROM_TOC_FULL_TOC_DATA_BLOCK, *PCDROM_TOC_FULL_TOC_DATA_BLOCK;
-
-#if 0 // Added to make MSVC happy.
-typedef struct _CDROM_TOC_FULL_TOC_DATA {
-  UCHAR  Length[2];
-  UCHAR  FirstCompleteSession;
-  UCHAR  LastCompleteSession;
-  CDROM_TOC_FULL_TOC_DATA_BLOCK  Descriptors[0];
-} CDROM_TOC_FULL_TOC_DATA, *PCDROM_TOC_FULL_TOC_DATA;
-
-typedef struct _CDROM_TOC_PMA_DATA {
-  UCHAR  Length[2];
-  UCHAR  Reserved1;
-  UCHAR  Reserved2;
-  CDROM_TOC_FULL_TOC_DATA_BLOCK  Descriptors[0];
-} CDROM_TOC_PMA_DATA, *PCDROM_TOC_PMA_DATA;
-#endif
-
-/* SUB_Q_HEADER.AudioStatus constants */
-#define AUDIO_STATUS_NOT_SUPPORTED  0x00
-#define AUDIO_STATUS_IN_PROGRESS    0x11
-#define AUDIO_STATUS_PAUSED         0x12
-#define AUDIO_STATUS_PLAY_COMPLETE  0x13
-#define AUDIO_STATUS_PLAY_ERROR     0x14
-#define AUDIO_STATUS_NO_STATUS      0x15
-
-typedef struct _SUB_Q_HEADER {
-  UCHAR  Reserved;
-  UCHAR  AudioStatus;
-  UCHAR  DataLength[2];
-} SUB_Q_HEADER, *PSUB_Q_HEADER;
-
-typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {
-  SUB_Q_HEADER  Header;
-  UCHAR  FormatCode;
-  UCHAR  Reserved[3];
-  UCHAR  Reserved1 : 7;
-  UCHAR  Mcval :1;
-  UCHAR  MediaCatalog[15];
-} SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;
-
-typedef struct _SUB_Q_TRACK_ISRC {
-  SUB_Q_HEADER  Header;
-  UCHAR  FormatCode;
-  UCHAR  Reserved0;
-  UCHAR  Track;
-  UCHAR  Reserved1;
-  UCHAR  Reserved2 : 7;
-  UCHAR  Tcval : 1;
-  UCHAR  TrackIsrc[15];
-} SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;
-
-typedef struct _SUB_Q_CURRENT_POSITION {
-  SUB_Q_HEADER  Header;
-  UCHAR  FormatCode;
-  UCHAR  Control : 4;
-  UCHAR  ADR : 4;
-  UCHAR  TrackNumber;
-  UCHAR  IndexNumber;
-  UCHAR  AbsoluteAddress[4];
-  UCHAR  TrackRelativeAddress[4];
-} SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;
-
-typedef union _SUB_Q_CHANNEL_DATA {
-  SUB_Q_CURRENT_POSITION  CurrentPosition;
-  SUB_Q_MEDIA_CATALOG_NUMBER  MediaCatalog;
-  SUB_Q_TRACK_ISRC  TrackIsrc;
-} SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA;
-
-/* CDROM_AUDIO_CONTROL.LbaFormat constants */
-#define AUDIO_WITH_PREEMPHASIS            0x1
-#define DIGITAL_COPY_PERMITTED            0x2
-#define AUDIO_DATA_TRACK                  0x4
-#define TWO_FOUR_CHANNEL_AUDIO            0x8
-
-typedef struct _CDROM_AUDIO_CONTROL {
-	UCHAR  LbaFormat;
-	USHORT  LogicalBlocksPerSecond;
-} CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
-
-typedef struct _VOLUME_CONTROL {
-  UCHAR  PortVolume[4];
-} VOLUME_CONTROL, *PVOLUME_CONTROL;
-
-typedef enum _TRACK_MODE_TYPE {
-	YellowMode2,
-	XAForm2,
-	CDDA
-} TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;
-
-typedef struct __RAW_READ_INFO {
-	LARGE_INTEGER  DiskOffset;
-	ULONG  SectorCount;
-	TRACK_MODE_TYPE  TrackMode;
-} RAW_READ_INFO, *PRAW_READ_INFO;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __NTDDCDRM_H */
diff --git a/backends/audiocd/win32/win32-audiocd.cpp b/backends/audiocd/win32/win32-audiocd.cpp
index da03391b1b9..ff11d5985e2 100644
--- a/backends/audiocd/win32/win32-audiocd.cpp
+++ b/backends/audiocd/win32/win32-audiocd.cpp
@@ -61,13 +61,7 @@
 #include "common/timer.h"
 
 #include <winioctl.h>
-#if _MSC_VER < 1900
-// WORKAROUND: Older versions of MSVC might not supply DDK headers by default.
-// Visual Studio 2015 contains the required headers. We use a compatibility
-// header from MinGW's w32api for all older versions.
-// TODO: Limit this to the Visual Studio versions which actually require this.
-#include "msvc/ntddcdrm.h"
-#elif defined(__MINGW32__) && !defined(__MINGW64__)
+#if defined(__MINGW32__) && !defined(__MINGW64__)
 // Classic MinGW uses non standard paths for DDK headers.
 #include <ddk/ntddcdrm.h>
 #else
diff --git a/common/scummsys.h b/common/scummsys.h
index 8d15622313e..cf6b5e3e1b4 100644
--- a/common/scummsys.h
+++ b/common/scummsys.h
@@ -35,6 +35,10 @@
 	#define GCC_ATLEAST(major, minor) 0
 #endif
 
+#if defined(_MSC_VER) && _MSC_VER < 1900
+	#error MSVC support requires MSVC 2015 or newer
+#endif
+
 #if defined(NONSTANDARD_PORT)
 
 	// Ports which need to perform #includes and #defines visible in
@@ -46,45 +50,6 @@
 
 	#if defined(WIN32)
 
-		#if defined(_MSC_VER) && _MSC_VER <= 1800
-
-		// FIXME: The placement of the workaround functions for MSVC below
-		// require us to include stdio.h and stdarg.h for MSVC here. This
-		// is not exactly nice...
-		// We should think of a better way of doing this.
-		#include <stdio.h>
-		#include <stdarg.h>
-
-		// MSVC's vsnprintf is either non-existent (2003) or bugged since it
-		// does not always include a terminating NULL (2005+). To work around
-		// that we fix up the _vsnprintf included. Note that the return value
-		// will still not match C99's specs!
-		inline int vsnprintf_msvc(char *str, size_t size, const char *format, va_list args) {
-			// We do not pass size - 1 here, to ensure we would get the same
-			// return value as when we would use _vsnprintf directly, since
-			// for example Common::String::format relies on this.
-			int retValue = _vsnprintf(str, size, format, args);
-			str[size - 1] = 0;
-			return retValue;
-		}
-
-		#define vsnprintf vsnprintf_msvc
-
-		// Visual Studio does not include snprintf in its standard C library.
-		// Instead it includes a function called _snprintf with somewhat
-		// similar semantics. The minor difference is that the return value in
-		// case the formatted string exceeds the buffer size is different.
-		// A much more dangerous one is that _snprintf does not always include
-		// a terminating null (Whoops!). Instead we map to our fixed vsnprintf.
-		inline int snprintf(char *str, size_t size, const char *format, ...) {
-			va_list args;
-			va_start(args, format);
-			int len = vsnprintf(str, size, format, args);
-			va_end(args);
-			return len;
-		}
-		#endif
-
 		#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
 		#define NOGDICAPMASKS
 		#define OEMRESOURCE
@@ -166,7 +131,7 @@
 #endif
 
 #ifndef STATIC_ASSERT
-#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER > 1600)
+#if __cplusplus >= 201103L || defined(_MSC_VER)
 	/**
 	 * Generates a compile-time assertion.
 	 *
@@ -378,7 +343,7 @@
 #endif
 
 #ifndef MSVC_PRINTF
-	#if defined(_MSC_VER) && _MSC_VER > 1400
+	#if defined(_MSC_VER)
 		#define MSVC_PRINTF _Printf_format_string_
 	#else
 		#define MSVC_PRINTF
diff --git a/common/str.cpp b/common/str.cpp
index efccba51634..da1b44a9d9e 100644
--- a/common/str.cpp
+++ b/common/str.cpp
@@ -668,11 +668,7 @@ int vsprintf_s(char *dst, size_t size, const char *format, va_list ap) {
 
 	int ret = vsnprintf(dst, size, format, ap);
 
-	if ((size_t)ret < size
-#if defined(_MSC_VER) && _MSC_VER <= 1800
-		&& ret != -1
-#endif
-		) {
+	if ((size_t)ret < size) {
 		// Nominal case: no truncation
 		return ret;
 	}
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index 7d2c5b86372..e44de09948a 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -1218,9 +1218,6 @@ const Tool s_tools[] = {
 
 const MSVCVersion s_msvc[] = {
 //    Ver    Name                     Solution                     Project    Toolset    LLVM
-	{ 10,    "Visual Studio 2010",    "11.00",          "2010",     "4.0",    "v100",    "LLVM-vs2010" },
-	{ 11,    "Visual Studio 2012",    "11.00",          "2012",     "4.0",    "v110",    "LLVM-vs2012" },
-	{ 12,    "Visual Studio 2013",    "12.00",          "2013",    "12.0",    "v120",    "LLVM-vs2013" },
 	{ 14,    "Visual Studio 2015",    "12.00",            "14",    "14.0",    "v140",    "LLVM-vs2014" },
 	{ 15,    "Visual Studio 2017",    "12.00",            "15",    "15.0",    "v141",    "llvm"        },
 	{ 16,    "Visual Studio 2019",    "12.00",    "Version 16",    "16.0",    "v142",    "llvm"        },
diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h
index d11f8f85b1a..b64c8e2b728 100644
--- a/devtools/create_project/create_project.h
+++ b/devtools/create_project/create_project.h
@@ -26,8 +26,8 @@
 #define __has_feature(x) 0 // Compatibility with non-clang compilers.
 #endif
 
-#if __cplusplus < 201103L && (!defined(_MSC_VER) || _MSC_VER < 1700)
-#define override           // Compatibility with non-C++11 compilers.
+#if defined(_MSC_VER) && _MSC_VER < 1900
+#error MSVC support requires MSVC 2015 or newer
 #endif
 
 #include <list>




More information about the Scummvm-git-logs mailing list