From 8fd48f4549e8234f748542aff3d976b4e2ac1278 Mon Sep 17 00:00:00 2001 From: Martin Baliet Date: Mon, 18 Mar 2019 22:59:25 +0100 Subject: [PATCH] Fix for ccls:Vec not building with MVS --- src/utils.hh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/utils.hh b/src/utils.hh index ec0d8ad6..8d74ff55 100644 --- a/src/utils.hh +++ b/src/utils.hh @@ -35,7 +35,7 @@ struct Matcher { std::string pattern; Matcher(const std::string &pattern); // throw - Matcher(Matcher&&) = default; + Matcher(Matcher &&) = default; ~Matcher(); bool Matches(const std::string &text) const; }; @@ -95,7 +95,7 @@ inline void hash_combine(std::size_t &seed, const T &v, Rest... rest) { template <> struct hash { \ std::size_t operator()(const type &t) const { \ std::size_t ret = 0; \ - ccls::hash_combine(ret, __VA_ARGS__); \ + ccls::hash_combine(ret, __VA_ARGS__); \ return ret; \ } \ }; \ @@ -143,7 +143,7 @@ public: template struct Vec { std::unique_ptr a; - int s; + int s = 0; const T *begin() const { return a.get(); } T *begin() { return a.get(); } const T *end() const { return a.get() + s; } @@ -151,5 +151,16 @@ template struct Vec { int size() const { return s; } const T &operator[](size_t i) const { return a.get()[i]; } T &operator[](size_t i) { return a.get()[i]; } + Vec &operator=(Vec &&rhs) { + a = std::move(rhs.a); + s = rhs.s; + return *this; + } + Vec(const Vec &lhs) : a(std::make_unique(lhs.s)), s(lhs.s) { + std::copy(lhs.begin(), lhs.end(), begin()); + s = lhs.s; + } + Vec(std::unique_ptr &&a_, int size) : a(std::move(a_)), s(size) {} + Vec(){}; }; } // namespace ccls