diff --git a/README.md b/README.md
index fb692499c..e2c00246b 100644
--- a/README.md
+++ b/README.md
@@ -12,9 +12,9 @@ Support is available on [the forums](http://forum.aegisub.org) or [on IRC](irc:/
Prerequisites:
-1. Visual Studio 2013 (Express edition is good enough) or the Windows 8.1 SDK (command line builds only).
-2. A recent DirectX SDK
-4. [Yasm](http://yasm.tortall.net/) installed to somewhere on your path.
+1. Visual Studio 2015 (the freee Community edition is good enough)
+2. The June 2010 DirectX SDK (the final release before DirectSound was dropped)
+3. [Yasm](http://yasm.tortall.net/) installed to somewhere on your path.
There are a few optional dependencies:
diff --git a/build/aegisub.props b/build/aegisub.props
index d2a68d035..0acc3d501 100644
--- a/build/aegisub.props
+++ b/build/aegisub.props
@@ -34,7 +34,7 @@
true
Unicode
MultiByte
- v120_xp
+ v140_xp
diff --git a/build/libaegisub/libaegisub.vcxproj b/build/libaegisub/libaegisub.vcxproj
index 8cf51032a..201e8155b 100644
--- a/build/libaegisub/libaegisub.vcxproj
+++ b/build/libaegisub/libaegisub.vcxproj
@@ -16,6 +16,7 @@
+ $(WindowsSDK_IncludePath);
$(SrcDir);
$(SrcDir)include;
%(AdditionalIncludeDirectories)
diff --git a/build/wx/wxWidgets.vcxproj b/build/wx/wxWidgets.vcxproj
index 2da8d8989..4a441b27b 100644
--- a/build/wx/wxWidgets.vcxproj
+++ b/build/wx/wxWidgets.vcxproj
@@ -21,6 +21,7 @@
$(SrcDir)include;%(AdditionalIncludeDirectories)
Use
wx/wxprec.h
+ /Zm150 %(AdditionalOptions)
$(SrcDir)include
diff --git a/libaegisub/common/io.cpp b/libaegisub/common/io.cpp
index c8531120f..e133a71ab 100644
--- a/libaegisub/common/io.cpp
+++ b/libaegisub/common/io.cpp
@@ -56,7 +56,7 @@ Save::Save(fs::path const& file, bool binary)
}
}
-Save::~Save() {
+Save::~Save() noexcept(false) {
fp.reset(); // Need to close before rename on Windows to unlock the file
for (int i = 0; i < 10; ++i) {
try {
diff --git a/libaegisub/include/libaegisub/io.h b/libaegisub/include/libaegisub/io.h
index beb5ba06d..5ab4f4af3 100644
--- a/libaegisub/include/libaegisub/io.h
+++ b/libaegisub/include/libaegisub/io.h
@@ -38,7 +38,7 @@ class Save {
public:
Save(fs::path const& file, bool binary = false);
- ~Save();
+ ~Save() noexcept(false);
std::ostream& Get() { return *fp; }
};
diff --git a/libaegisub/include/libaegisub/line_iterator.h b/libaegisub/include/libaegisub/line_iterator.h
index 223aeb96b..1e4fee9b1 100644
--- a/libaegisub/include/libaegisub/line_iterator.h
+++ b/libaegisub/include/libaegisub/line_iterator.h
@@ -43,14 +43,10 @@ public:
line_iterator_base() = default;
line_iterator_base(line_iterator_base const&) = default;
-#ifndef _MSC_VER
line_iterator_base(line_iterator_base&&) = default;
-#endif
line_iterator_base& operator=(line_iterator_base const&) = default;
-#ifndef _MSC_VER
line_iterator_base& operator=(line_iterator_base&&) = default;
-#endif
bool operator==(line_iterator_base const& rgt) const { return stream == rgt.stream; }
bool operator!=(line_iterator_base const& rgt) const { return !operator==(rgt); }
diff --git a/src/ass_override.cpp b/src/ass_override.cpp
index 774c93a77..fc8758c08 100644
--- a/src/ass_override.cpp
+++ b/src/ass_override.cpp
@@ -52,27 +52,7 @@ AssOverrideParameter::AssOverrideParameter(VariableDataType type, AssParameterCl
{
}
-#ifdef _MSC_VER
-AssOverrideParameter::AssOverrideParameter(AssOverrideParameter&& o)
-: value(std::move(o.value))
-, block(std::move(o.block))
-, type(o.type)
-, classification(o.classification)
-, omitted(o.omitted)
-{
-}
-
-AssOverrideParameter& AssOverrideParameter::operator=(AssOverrideParameter&& rhs) {
- value = std::move(rhs.value);
- block = std::move(rhs.block);
- type = rhs.type;
- classification = rhs.classification;
- return *this;
-}
-#endif
-
-AssOverrideParameter::~AssOverrideParameter() {
-}
+AssOverrideParameter::~AssOverrideParameter() = default;
template<> std::string AssOverrideParameter::Get() const {
if (omitted) throw agi::InternalError("AssOverrideParameter::Get() called on omitted parameter");
@@ -454,22 +434,6 @@ AssOverrideTag::AssOverrideTag(std::string const& text) {
SetText(text);
}
-#ifdef _MSC_VER
-AssOverrideTag::AssOverrideTag(AssOverrideTag&& rhs)
-: valid(rhs.valid)
-, Name(std::move(rhs.Name))
-, Params(std::move(rhs.Params))
-{
-}
-
-AssOverrideTag& AssOverrideTag::operator=(AssOverrideTag&& rhs) {
- valid = rhs.valid;
- Name = std::move(rhs.Name);
- Params = std::move(rhs.Params);
- return *this;
-}
-#endif
-
void AssOverrideTag::Clear() {
Params.clear();
Params.reserve(6);
diff --git a/src/ass_override.h b/src/ass_override.h
index 703bfa24d..dfcd1f893 100644
--- a/src/ass_override.h
+++ b/src/ass_override.h
@@ -69,13 +69,8 @@ class AssOverrideParameter {
public:
AssOverrideParameter(VariableDataType type, AssParameterClass classification);
-#ifdef _MSC_VER
- AssOverrideParameter(AssOverrideParameter&&);
- AssOverrideParameter& operator=(AssOverrideParameter&&);
-#else
AssOverrideParameter(AssOverrideParameter&&) = default;
AssOverrideParameter& operator=(AssOverrideParameter&&) = default;
-#endif
~AssOverrideParameter();
/// Type of parameter
@@ -98,13 +93,8 @@ class AssOverrideTag {
public:
AssOverrideTag() = default;
AssOverrideTag(std::string const& text);
-#ifdef _MSC_VER
- AssOverrideTag(AssOverrideTag&&);
- AssOverrideTag& operator=(AssOverrideTag&&);
-#else
AssOverrideTag(AssOverrideTag&&) = default;
AssOverrideTag& operator=(AssOverrideTag&&) = default;
-#endif
std::string Name;
std::vector Params;
diff --git a/src/block_cache.h b/src/block_cache.h
index afbdd0c55..fd84f86f6 100644
--- a/src/block_cache.h
+++ b/src/block_cache.h
@@ -54,16 +54,6 @@ class DataBlockCache {
/// The blocks contained in the macroblock
BlockArray blocks;
-
-#ifdef _MSC_VER
- MacroBlock() = default;
- MacroBlock(MacroBlock&& rgt) : position(rgt.position), blocks(std::move(rgt.blocks)) { }
- MacroBlock& operator=(MacroBlock&& rgt) {
- position = rgt.position;
- blocks = std::move(rgt.blocks);
- return *this;
- }
-#endif
};
/// Type of an array of macro blocks
@@ -105,17 +95,6 @@ class DataBlockCache {
}
public:
-#ifdef _MSC_VER
- DataBlockCache(DataBlockCache&& rgt)
- : data(std::move(rgt.data))
- , age(std::move(rgt.age))
- , macroblock_size(rgt.macroblock_size)
- , macroblock_index_mask(rgt.macroblock_index_mask)
- , size(rgt.size)
- , factory(std::move(rgt.factory))
- { }
-#endif
-
/// @brief Constructor
/// @param block_count Total number of blocks the cache will manage
/// @param factory Factory object to use for producing blocks
diff --git a/src/command/edit.cpp b/src/command/edit.cpp
index 3ca9226d3..67f2c0cc0 100644
--- a/src/command/edit.cpp
+++ b/src/command/edit.cpp
@@ -164,11 +164,7 @@ struct parsed_line {
std::vector> blocks;
parsed_line(AssDialogue *line) : line(line), blocks(line->ParseTags()) { }
-#ifdef _MSC_VER
- parsed_line(parsed_line&& r) : line(r.line), blocks(std::move(r.blocks)) { }
-#else
parsed_line(parsed_line&& r) = default;
-#endif
const AssOverrideTag *find_tag(int blockn, std::string const& tag_name, std::string const& alt) const {
for (auto ovr : blocks | sliced(0, blockn + 1) | reversed | agi::of_type()) {
diff --git a/src/subtitle_format_ebu3264.cpp b/src/subtitle_format_ebu3264.cpp
index 7a062cef1..a9594f26d 100644
--- a/src/subtitle_format_ebu3264.cpp
+++ b/src/subtitle_format_ebu3264.cpp
@@ -526,9 +526,6 @@ namespace
return tti;
}
-#ifdef _MSC_VER
-#define vsnprintf _vsnprintf
-#endif
void fieldprintf(char *field, size_t fieldlen, const char *format, ...)
{
char buf[16];