1a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant//===----------------------------------------------------------------------===//
2a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant//
3a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant//                     The LLVM Compiler Infrastructure
4a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant//
8a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant//===----------------------------------------------------------------------===//
9a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant
10a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant// <future>
11a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant
12a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant// class future_error
13a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant
14bfd5530c064923efa0d345dfce3548b873565dafHoward Hinnant// const char* what() const throw();
15a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant
16a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant#include <future>
17a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant#include <cstring>
18a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant#include <cassert>
19a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant
20a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnantint main()
21a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant{
22a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    {
23a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        std::future_error f(std::make_error_code(std::future_errc::broken_promise));
24a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        assert(std::strcmp(f.what(), "The associated promise has been destructed prior "
25a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant                      "to the associated state becoming ready.") == 0);
26a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    }
27a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    {
28a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        std::future_error f(std::make_error_code(std::future_errc::future_already_retrieved));
29a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        assert(std::strcmp(f.what(), "The future has already been retrieved from "
30a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant                      "the promise or packaged_task.") == 0);
31a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    }
32a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    {
33a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        std::future_error f(std::make_error_code(std::future_errc::promise_already_satisfied));
34a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        assert(std::strcmp(f.what(), "The state of the promise has already been set.") == 0);
35a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    }
36a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    {
37a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        std::future_error f(std::make_error_code(std::future_errc::no_state));
38a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant        assert(std::strcmp(f.what(), "Operation not permitted on an object without "
39a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant                      "an associated state.") == 0);
40a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant    }
41a652172d86b1063983c20bfc1c3f9d44d0e7c5bcHoward Hinnant}
42