зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1466909 - Use AddLvalueReference for UniquePtr's operator*(). r=froydnj
--HG-- extra : rebase_source : df072aca7e79ce534c3bc620a352adfc92fbf245
This commit is contained in:
Родитель
b6ef1b3ae7
Коммит
f7acf7bc9c
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче