Bug 1466909 - Use AddLvalueReference for UniquePtr's operator*(). r=froydnj

--HG--
extra : rebase_source : df072aca7e79ce534c3bc620a352adfc92fbf245
This commit is contained in:
André Bargull 2018-06-07 07:27:22 -07:00
Родитель b6ef1b3ae7
Коммит f7acf7bc9c
2 изменённых файлов: 36 добавлений и 1 удалений

Просмотреть файл

@ -314,7 +314,7 @@ public:
return *this;
}
T& operator*() const { return *get(); }
typename AddLvalueReference<T>::Type operator*() const { return *get(); }
Pointer operator->() const
{
MOZ_ASSERT(get(), "dereferencing a UniquePtr containing nullptr");

Просмотреть файл

@ -9,6 +9,7 @@
#include "mozilla/Move.h"
#include "mozilla/TypeTraits.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/UniquePtrExtensions.h"
#include "mozilla/Vector.h"
#include <stddef.h>
@ -18,6 +19,7 @@ using mozilla::IsSame;
using mozilla::MakeUnique;
using mozilla::Swap;
using mozilla::UniquePtr;
using mozilla::UniqueFreePtr;
using mozilla::Vector;
#define CHECK(c) \
@ -562,6 +564,36 @@ TestMakeUnique()
return true;
}
static bool
TestVoid()
{
// UniquePtr<void> supports all operations except operator*() and
// operator->().
UniqueFreePtr<void> p1(malloc(1));
UniqueFreePtr<void> p2;
auto x = p1.get();
CHECK(x != nullptr);
CHECK((IsSame<decltype(x), void*>::value));
p2.reset(p1.release());
CHECK(p1.get() == nullptr);
CHECK(p2.get() != nullptr);
p1 = std::move(p2);
CHECK(p1);
CHECK(!p2);
p1.swap(p2);
CHECK(!p1);
CHECK(p2);
p2 = nullptr;
CHECK(!p2);
return true;
}
int
main()
{
@ -588,5 +620,8 @@ main()
if (!TestMakeUnique()) {
return 1;
}
if (!TestVoid()) {
return 1;
}
return 0;
}