From f5e27edc7b838920375583cf20d9023e988e8d14 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Tue, 3 Mar 2015 18:39:00 +0000 Subject: [PATCH] [Small]BitVector::reference: Explicitly default copy construction as it is deprecated in C++11 in the presence of explicit copy assignment. I tried making these private & friended to the BitVector, but that didn't work - there's one use of BitVector::reference in Clang that actually copies it into a local variable & uses it from there, rather than just using the result of op[] in a temporary expression. Whether or not this is desired is debatable (we could just fix that one use in Clang) & it's not clear which way the C++ standard falls on this for std::bitset's reference type (it has the same bug at least in libstdc++, but Clang's -Wdeprecated doesn't flag it, because it's in a standard header) While it was only BitVector::reference's copy ctor that was referenced by user code, I made SmallBitVector::reference's copy ctor public too, for consistency. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231099 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/BitVector.h | 2 +- include/llvm/ADT/SmallBitVector.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h index 0dbe810d904..f58dd7356c7 100644 --- a/include/llvm/ADT/BitVector.h +++ b/include/llvm/ADT/BitVector.h @@ -53,7 +53,7 @@ public: BitPos = Idx % BITWORD_SIZE; } - ~reference() {} + reference(const reference&) = default; reference &operator=(reference t) { *this = bool(t); diff --git a/include/llvm/ADT/SmallBitVector.h b/include/llvm/ADT/SmallBitVector.h index 22e8ccd8ea0..ae3d645396f 100644 --- a/include/llvm/ADT/SmallBitVector.h +++ b/include/llvm/ADT/SmallBitVector.h @@ -66,6 +66,8 @@ public: public: reference(SmallBitVector &b, unsigned Idx) : TheVector(b), BitPos(Idx) {} + reference(const reference&) = default; + reference& operator=(reference t) { *this = bool(t); return *this; -- 2.11.0