diff options
| author | nicole mazzuca <mazzucan@outlook.com> | 2019-08-12 14:02:59 -0700 |
|---|---|---|
| committer | Victor Romero <romerosanchezv@gmail.com> | 2019-08-12 14:02:59 -0700 |
| commit | 875648e10b2e5b5dfba6be75997171f10cb868ed (patch) | |
| tree | 30b8b8a5f3c12a758c8259f3c92938e7abe0f712 | |
| parent | da61a933fc325d99eecc1b39cd29dbe1584e1bf9 (diff) | |
| download | vcpkg-875648e10b2e5b5dfba6be75997171f10cb868ed.tar.gz vcpkg-875648e10b2e5b5dfba6be75997171f10cb868ed.zip | |
[vcpkg] Fix the build on VS2015 debug (#7637)
The VS2015 standard library requires, in debug mode, a comparison
operator on `T × U` and `U × T` to also be a comparison operator on
`T × T` and on `U × U`, and so in
vcpkg::Install::install_package::intersection_compare, I've added two
new `operator()` overloads which take those respectively, on VS2015.
Also, `[nodiscard]` was added to somewhere in `vcpkg/base/strings.h`,
which gives a warning in VS2015 -- thus, I added the `vcpkg/pragmas.h`
include, since that fixes the warning.
| -rw-r--r-- | toolsrc/include/vcpkg/base/strings.h | 2 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/install.cpp | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/toolsrc/include/vcpkg/base/strings.h b/toolsrc/include/vcpkg/base/strings.h index dde4e9693..a147a8373 100644 --- a/toolsrc/include/vcpkg/base/strings.h +++ b/toolsrc/include/vcpkg/base/strings.h @@ -1,10 +1,12 @@ #pragma once + #include <vcpkg/base/cstringview.h> #include <vcpkg/base/optional.h> #include <vcpkg/base/stringliteral.h> #include <vcpkg/base/stringview.h> #include <vcpkg/base/view.h> +#include <vcpkg/pragmas.h> #include <vector> diff --git a/toolsrc/src/vcpkg/install.cpp b/toolsrc/src/vcpkg/install.cpp index 165f13126..974e5f798 100644 --- a/toolsrc/src/vcpkg/install.cpp +++ b/toolsrc/src/vcpkg/install.cpp @@ -202,6 +202,12 @@ namespace vcpkg::Install struct intersection_compare { + // The VS2015 standard library requires comparison operators of T and U + // to also support comparison of T and T, and of U and U, due to debug checks. +#if _MSC_VER < 1910 + bool operator()(const std::string& lhs, const std::string& rhs) { return lhs < rhs; } + bool operator()(const file_pack& lhs, const file_pack& rhs) { return lhs.first < rhs.first; } +#endif bool operator()(const std::string& lhs, const file_pack& rhs) { return lhs < rhs.first; } bool operator()(const file_pack& lhs, const std::string& rhs) { return lhs.first < rhs; } }; |
