blob: 89c9f85d38102bd0d69ed6576d523d44bd941c24 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
9
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000010// <exception>
11
12// template<class E> exception_ptr make_exception_ptr(E e);
13
14#include <exception>
15#include <cassert>
16
17struct A
18{
19 static int constructed;
20 int data_;
21
22 A(int data = 0) : data_(data) {++constructed;}
23 ~A() {--constructed;}
24 A(const A& a) : data_(a.data_) {++constructed;}
25};
26
27int A::constructed = 0;
28
29int main()
30{
31 {
32 std::exception_ptr p = std::make_exception_ptr(A(5));
33 try
34 {
35 std::rethrow_exception(p);
36 assert(false);
37 }
38 catch (const A& a)
39 {
40 assert(A::constructed == 1);
41 assert(p != nullptr);
42 p = nullptr;
43 assert(p == nullptr);
44 assert(a.data_ == 5);
45 assert(A::constructed == 1);
46 }
47 assert(A::constructed == 0);
48 }
49}