123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //===----------------------------------------------------------------------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is dual licensed under the MIT and the University of Illinois Open
- // Source Licenses. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- // UNSUPPORTED: c++98, c++03, c++11
- // <optional>
- // ~optional();
- #include <experimental/optional>
- #include <type_traits>
- #include <cassert>
- using std::experimental::optional;
- class X
- {
- public:
- static bool dtor_called;
- X() = default;
- ~X() {dtor_called = true;}
- };
- bool X::dtor_called = false;
- int main()
- {
- {
- typedef int T;
- static_assert(std::is_trivially_destructible<T>::value, "");
- static_assert(std::is_trivially_destructible<optional<T>>::value, "");
- }
- {
- typedef double T;
- static_assert(std::is_trivially_destructible<T>::value, "");
- static_assert(std::is_trivially_destructible<optional<T>>::value, "");
- }
- {
- typedef X T;
- static_assert(!std::is_trivially_destructible<T>::value, "");
- static_assert(!std::is_trivially_destructible<optional<T>>::value, "");
- {
- X x;
- optional<X> opt{x};
- assert(X::dtor_called == false);
- }
- assert(X::dtor_called == true);
- }
- }
|