mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-02 07:16:07 +00:00
[libc++][test] Add tuple trivial destructor test
There is only compile-time tests in `dtor.pass.cpp`, so it could be made a `dtor.compile.pass.cpp`. Instead, add a runtime test for testing the trivial destructor behavior for `tuple`. Differential Revision: https://reviews.llvm.org/D109298
This commit is contained in:
parent
5f57ca208b
commit
c115e760c2
@ -25,18 +25,37 @@
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
struct TrackDtor {
|
||||
int* count_;
|
||||
constexpr explicit TrackDtor(int* count) : count_(count) {}
|
||||
TEST_CONSTEXPR_CXX14 TrackDtor(TrackDtor&& that) : count_(that.count_) { that.count_ = nullptr; }
|
||||
TEST_CONSTEXPR_CXX20 ~TrackDtor() { if(count_) ++*count_; }
|
||||
};
|
||||
static_assert(!std::is_trivially_destructible<TrackDtor>::value, "");
|
||||
|
||||
static_assert(std::is_trivially_destructible<std::tuple<>>::value, "");
|
||||
static_assert(std::is_trivially_destructible<std::tuple<void*>>::value, "");
|
||||
static_assert(std::is_trivially_destructible<std::tuple<int, float>>::value, "");
|
||||
static_assert(!std::is_trivially_destructible<std::tuple<std::string>>::value, "");
|
||||
static_assert(!std::is_trivially_destructible<std::tuple<int, std::string>>::value, "");
|
||||
|
||||
TEST_CONSTEXPR_CXX20 bool test() {
|
||||
int count = 0;
|
||||
{
|
||||
std::tuple<TrackDtor> tuple{TrackDtor(&count)};
|
||||
assert(count == 0);
|
||||
}
|
||||
assert(count == 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
static_assert(std::is_trivially_destructible<
|
||||
std::tuple<> >::value, "");
|
||||
static_assert(std::is_trivially_destructible<
|
||||
std::tuple<void*> >::value, "");
|
||||
static_assert(std::is_trivially_destructible<
|
||||
std::tuple<int, float> >::value, "");
|
||||
static_assert(!std::is_trivially_destructible<
|
||||
std::tuple<std::string> >::value, "");
|
||||
static_assert(!std::is_trivially_destructible<
|
||||
std::tuple<int, std::string> >::value, "");
|
||||
test();
|
||||
#if TEST_STD_VER > 17
|
||||
static_assert(test());
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user