Add: Optional implementation of std::optional for pre-C++17 compilers.

Sourced from https://github.com/akrzemi1/Optional, Boost Software License, Version 1.0.
This commit is contained in:
Michael Lutz
2020-05-17 23:32:01 +02:00
parent 63ccb36ef3
commit 8aef14386f
13 changed files with 1243 additions and 80 deletions

View File

@@ -974,6 +974,8 @@
<ClInclude Include="..\src\table\water_land.h" />
<ClCompile Include="..\src\3rdparty\md5\md5.cpp" />
<ClInclude Include="..\src\3rdparty\md5\md5.h" />
<ClInclude Include="..\src\3rdparty\optional\optional.hpp" />
<ClInclude Include="..\src\3rdparty\optional\ottd_optional.h" />
<ClCompile Include="..\src\script\script_config.cpp" />
<ClInclude Include="..\src\script\script_config.hpp" />
<ClInclude Include="..\src\script\script_fatalerror.hpp" />

View File

@@ -28,78 +28,81 @@
<Filter Include="MD5">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000008}</UniqueIdentifier>
</Filter>
<Filter Include="Script">
<Filter Include="Compat">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000009}</UniqueIdentifier>
</Filter>
<Filter Include="Squirrel">
<Filter Include="Script">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000010}</UniqueIdentifier>
</Filter>
<Filter Include="Squirrel headers">
<Filter Include="Squirrel">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000011}</UniqueIdentifier>
</Filter>
<Filter Include="AI Core">
<Filter Include="Squirrel headers">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000012}</UniqueIdentifier>
</Filter>
<Filter Include="AI API">
<Filter Include="AI Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000013}</UniqueIdentifier>
</Filter>
<Filter Include="Game API">
<Filter Include="AI API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000014}</UniqueIdentifier>
</Filter>
<Filter Include="Game Core">
<Filter Include="Game API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000015}</UniqueIdentifier>
</Filter>
<Filter Include="Script API">
<Filter Include="Game Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000016}</UniqueIdentifier>
</Filter>
<Filter Include="Script API Implementation">
<Filter Include="Script API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000017}</UniqueIdentifier>
</Filter>
<Filter Include="Blitters">
<Filter Include="Script API Implementation">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000018}</UniqueIdentifier>
</Filter>
<Filter Include="Drivers">
<Filter Include="Blitters">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000019}</UniqueIdentifier>
</Filter>
<Filter Include="Sprite loaders">
<Filter Include="Drivers">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000020}</UniqueIdentifier>
</Filter>
<Filter Include="NewGRF">
<Filter Include="Sprite loaders">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000021}</UniqueIdentifier>
</Filter>
<Filter Include="Map Accessors">
<Filter Include="NewGRF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000022}</UniqueIdentifier>
</Filter>
<Filter Include="Misc">
<Filter Include="Map Accessors">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000023}</UniqueIdentifier>
</Filter>
<Filter Include="Network Core">
<Filter Include="Misc">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000024}</UniqueIdentifier>
</Filter>
<Filter Include="Pathfinder">
<Filter Include="Network Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000025}</UniqueIdentifier>
</Filter>
<Filter Include="NPF">
<Filter Include="Pathfinder">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000026}</UniqueIdentifier>
</Filter>
<Filter Include="YAPF">
<Filter Include="NPF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000027}</UniqueIdentifier>
</Filter>
<Filter Include="Video">
<Filter Include="YAPF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000028}</UniqueIdentifier>
</Filter>
<Filter Include="Music">
<Filter Include="Video">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000029}</UniqueIdentifier>
</Filter>
<Filter Include="Sound">
<Filter Include="Music">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000030}</UniqueIdentifier>
</Filter>
<Filter Include="Windows files">
<Filter Include="Sound">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000031}</UniqueIdentifier>
</Filter>
<Filter Include="Threading">
<Filter Include="Windows files">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000032}</UniqueIdentifier>
</Filter>
<Filter Include="Threading">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000033}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\airport.cpp">
@@ -2010,6 +2013,12 @@
<ClInclude Include="..\src\3rdparty\md5\md5.h">
<Filter>MD5</Filter>
</ClInclude>
<ClInclude Include="..\src\3rdparty\optional\optional.hpp">
<Filter>Compat</Filter>
</ClInclude>
<ClInclude Include="..\src\3rdparty\optional\ottd_optional.h">
<Filter>Compat</Filter>
</ClInclude>
<ClCompile Include="..\src\script\script_config.cpp">
<Filter>Script</Filter>
</ClCompile>

View File

@@ -974,6 +974,8 @@
<ClInclude Include="..\src\table\water_land.h" />
<ClCompile Include="..\src\3rdparty\md5\md5.cpp" />
<ClInclude Include="..\src\3rdparty\md5\md5.h" />
<ClInclude Include="..\src\3rdparty\optional\optional.hpp" />
<ClInclude Include="..\src\3rdparty\optional\ottd_optional.h" />
<ClCompile Include="..\src\script\script_config.cpp" />
<ClInclude Include="..\src\script\script_config.hpp" />
<ClInclude Include="..\src\script\script_fatalerror.hpp" />

View File

@@ -28,78 +28,81 @@
<Filter Include="MD5">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000008}</UniqueIdentifier>
</Filter>
<Filter Include="Script">
<Filter Include="Compat">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000009}</UniqueIdentifier>
</Filter>
<Filter Include="Squirrel">
<Filter Include="Script">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000010}</UniqueIdentifier>
</Filter>
<Filter Include="Squirrel headers">
<Filter Include="Squirrel">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000011}</UniqueIdentifier>
</Filter>
<Filter Include="AI Core">
<Filter Include="Squirrel headers">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000012}</UniqueIdentifier>
</Filter>
<Filter Include="AI API">
<Filter Include="AI Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000013}</UniqueIdentifier>
</Filter>
<Filter Include="Game API">
<Filter Include="AI API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000014}</UniqueIdentifier>
</Filter>
<Filter Include="Game Core">
<Filter Include="Game API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000015}</UniqueIdentifier>
</Filter>
<Filter Include="Script API">
<Filter Include="Game Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000016}</UniqueIdentifier>
</Filter>
<Filter Include="Script API Implementation">
<Filter Include="Script API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000017}</UniqueIdentifier>
</Filter>
<Filter Include="Blitters">
<Filter Include="Script API Implementation">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000018}</UniqueIdentifier>
</Filter>
<Filter Include="Drivers">
<Filter Include="Blitters">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000019}</UniqueIdentifier>
</Filter>
<Filter Include="Sprite loaders">
<Filter Include="Drivers">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000020}</UniqueIdentifier>
</Filter>
<Filter Include="NewGRF">
<Filter Include="Sprite loaders">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000021}</UniqueIdentifier>
</Filter>
<Filter Include="Map Accessors">
<Filter Include="NewGRF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000022}</UniqueIdentifier>
</Filter>
<Filter Include="Misc">
<Filter Include="Map Accessors">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000023}</UniqueIdentifier>
</Filter>
<Filter Include="Network Core">
<Filter Include="Misc">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000024}</UniqueIdentifier>
</Filter>
<Filter Include="Pathfinder">
<Filter Include="Network Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000025}</UniqueIdentifier>
</Filter>
<Filter Include="NPF">
<Filter Include="Pathfinder">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000026}</UniqueIdentifier>
</Filter>
<Filter Include="YAPF">
<Filter Include="NPF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000027}</UniqueIdentifier>
</Filter>
<Filter Include="Video">
<Filter Include="YAPF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000028}</UniqueIdentifier>
</Filter>
<Filter Include="Music">
<Filter Include="Video">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000029}</UniqueIdentifier>
</Filter>
<Filter Include="Sound">
<Filter Include="Music">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000030}</UniqueIdentifier>
</Filter>
<Filter Include="Windows files">
<Filter Include="Sound">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000031}</UniqueIdentifier>
</Filter>
<Filter Include="Threading">
<Filter Include="Windows files">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000032}</UniqueIdentifier>
</Filter>
<Filter Include="Threading">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000033}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\airport.cpp">
@@ -2010,6 +2013,12 @@
<ClInclude Include="..\src\3rdparty\md5\md5.h">
<Filter>MD5</Filter>
</ClInclude>
<ClInclude Include="..\src\3rdparty\optional\optional.hpp">
<Filter>Compat</Filter>
</ClInclude>
<ClInclude Include="..\src\3rdparty\optional\ottd_optional.h">
<Filter>Compat</Filter>
</ClInclude>
<ClCompile Include="..\src\script\script_config.cpp">
<Filter>Script</Filter>
</ClCompile>

View File

@@ -100,7 +100,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -168,7 +168,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -223,7 +223,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -289,7 +289,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -974,6 +974,8 @@
<ClInclude Include="..\src\table\water_land.h" />
<ClCompile Include="..\src\3rdparty\md5\md5.cpp" />
<ClInclude Include="..\src\3rdparty\md5\md5.h" />
<ClInclude Include="..\src\3rdparty\optional\optional.hpp" />
<ClInclude Include="..\src\3rdparty\optional\ottd_optional.h" />
<ClCompile Include="..\src\script\script_config.cpp" />
<ClInclude Include="..\src\script\script_config.hpp" />
<ClInclude Include="..\src\script\script_fatalerror.hpp" />

View File

@@ -28,78 +28,81 @@
<Filter Include="MD5">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000008}</UniqueIdentifier>
</Filter>
<Filter Include="Script">
<Filter Include="Compat">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000009}</UniqueIdentifier>
</Filter>
<Filter Include="Squirrel">
<Filter Include="Script">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000010}</UniqueIdentifier>
</Filter>
<Filter Include="Squirrel headers">
<Filter Include="Squirrel">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000011}</UniqueIdentifier>
</Filter>
<Filter Include="AI Core">
<Filter Include="Squirrel headers">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000012}</UniqueIdentifier>
</Filter>
<Filter Include="AI API">
<Filter Include="AI Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000013}</UniqueIdentifier>
</Filter>
<Filter Include="Game API">
<Filter Include="AI API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000014}</UniqueIdentifier>
</Filter>
<Filter Include="Game Core">
<Filter Include="Game API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000015}</UniqueIdentifier>
</Filter>
<Filter Include="Script API">
<Filter Include="Game Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000016}</UniqueIdentifier>
</Filter>
<Filter Include="Script API Implementation">
<Filter Include="Script API">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000017}</UniqueIdentifier>
</Filter>
<Filter Include="Blitters">
<Filter Include="Script API Implementation">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000018}</UniqueIdentifier>
</Filter>
<Filter Include="Drivers">
<Filter Include="Blitters">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000019}</UniqueIdentifier>
</Filter>
<Filter Include="Sprite loaders">
<Filter Include="Drivers">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000020}</UniqueIdentifier>
</Filter>
<Filter Include="NewGRF">
<Filter Include="Sprite loaders">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000021}</UniqueIdentifier>
</Filter>
<Filter Include="Map Accessors">
<Filter Include="NewGRF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000022}</UniqueIdentifier>
</Filter>
<Filter Include="Misc">
<Filter Include="Map Accessors">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000023}</UniqueIdentifier>
</Filter>
<Filter Include="Network Core">
<Filter Include="Misc">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000024}</UniqueIdentifier>
</Filter>
<Filter Include="Pathfinder">
<Filter Include="Network Core">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000025}</UniqueIdentifier>
</Filter>
<Filter Include="NPF">
<Filter Include="Pathfinder">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000026}</UniqueIdentifier>
</Filter>
<Filter Include="YAPF">
<Filter Include="NPF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000027}</UniqueIdentifier>
</Filter>
<Filter Include="Video">
<Filter Include="YAPF">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000028}</UniqueIdentifier>
</Filter>
<Filter Include="Music">
<Filter Include="Video">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000029}</UniqueIdentifier>
</Filter>
<Filter Include="Sound">
<Filter Include="Music">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000030}</UniqueIdentifier>
</Filter>
<Filter Include="Windows files">
<Filter Include="Sound">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000031}</UniqueIdentifier>
</Filter>
<Filter Include="Threading">
<Filter Include="Windows files">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000032}</UniqueIdentifier>
</Filter>
<Filter Include="Threading">
<UniqueIdentifier>{c76ff9f1-1e62-46d8-8d55-000000000033}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\airport.cpp">
@@ -2010,6 +2013,12 @@
<ClInclude Include="..\src\3rdparty\md5\md5.h">
<Filter>MD5</Filter>
</ClInclude>
<ClInclude Include="..\src\3rdparty\optional\optional.hpp">
<Filter>Compat</Filter>
</ClInclude>
<ClInclude Include="..\src\3rdparty\optional\ottd_optional.h">
<Filter>Compat</Filter>
</ClInclude>
<ClCompile Include="..\src\script\script_config.cpp">
<Filter>Script</Filter>
</ClCompile>

View File

@@ -100,7 +100,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -168,7 +168,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -223,7 +223,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Full</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -289,7 +289,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/J /Zc:throwingNew /std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

View File

@@ -39,6 +39,7 @@
<Inputs>%(Inputs)</Inputs>
</CustomBuildStep>
<ClCompile>
<AdditionalOptions>/std:c++latest /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<Optimization>MinSpace</Optimization>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<PreprocessorDefinitions>SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>