Fix PR26961 - Add default constructor to std::pointer_safety struct.

In ABI v1 libc++ implements std::pointer_safety as a class type instead
of an enumeration. However this class type does not provide
a default constructor as it should. This patch adds that default constructor.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291059 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Fiselier
2017-01-05 01:28:40 +00:00
parent 46a0c2ef0c
commit c3dfeced41
3 changed files with 37 additions and 2 deletions

View File

@@ -14,13 +14,33 @@
#include <memory>
#include <cassert>
#include "test_macros.h"
// libc++ doesn't offer std::pointer_safety in C++03 under the new ABI
#if TEST_STD_VER < 11 && defined(_LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE)
#define TEST_IS_UNSUPPORTED
#endif
#ifndef TEST_IS_UNSUPPORTED
void test_pr26961() {
std::pointer_safety d;
d = std::get_pointer_safety();
assert(d == std::get_pointer_safety());
}
#endif
int main()
{
// Test that std::pointer_safety is still offered in C++03 under the old ABI.
#ifndef _LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE
#ifndef TEST_IS_UNSUPPORTED
{
// Test that std::pointer_safety is still offered in C++03 under the old ABI.
std::pointer_safety r = std::get_pointer_safety();
assert(r == std::pointer_safety::relaxed ||
r == std::pointer_safety::preferred ||
r == std::pointer_safety::strict);
}
{
test_pr26961();
}
#endif
}