]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/std/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp
Vendor import of libc++ release_39 branch r276489:
[FreeBSD/FreeBSD.git] / test / std / utilities / function.objects / bind / func.bind / func.bind.place / placeholders.pass.cpp
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <functional>
11
12 // placeholders
13 // The placeholders are constexpr in C++17 and beyond.
14 // libc++ provides constexpr placeholders in C++11 and beyond.
15
16 #include <functional>
17 #include <type_traits>
18
19 #include "test_macros.h"
20
21 template <class T>
22 void
23 test(const T& t)
24 {
25     // Test default constructible.
26     T t2;
27     ((void)t2);
28     // Test copy constructible.
29     T t3 = t;
30     ((void)t3);
31     static_assert(std::is_nothrow_copy_constructible<T>::value, "");
32     static_assert(std::is_nothrow_move_constructible<T>::value, "");
33 }
34
35 #if TEST_STD_VER >= 11
36 constexpr decltype(std::placeholders::_1)  default1{};
37 constexpr decltype(std::placeholders::_2)  default2{};
38 constexpr decltype(std::placeholders::_3)  default3{};
39 constexpr decltype(std::placeholders::_4)  default4{};
40 constexpr decltype(std::placeholders::_5)  default5{};
41 constexpr decltype(std::placeholders::_6)  default6{};
42 constexpr decltype(std::placeholders::_7)  default7{};
43 constexpr decltype(std::placeholders::_8)  default8{};
44 constexpr decltype(std::placeholders::_9)  default9{};
45 constexpr decltype(std::placeholders::_10) default10{};
46
47 constexpr decltype(std::placeholders::_1)  cp1 = std::placeholders::_1;
48 constexpr decltype(std::placeholders::_2)  cp2 = std::placeholders::_2;
49 constexpr decltype(std::placeholders::_3)  cp3 = std::placeholders::_3;
50 constexpr decltype(std::placeholders::_4)  cp4 = std::placeholders::_4;
51 constexpr decltype(std::placeholders::_5)  cp5 = std::placeholders::_5;
52 constexpr decltype(std::placeholders::_6)  cp6 = std::placeholders::_6;
53 constexpr decltype(std::placeholders::_7)  cp7 = std::placeholders::_7;
54 constexpr decltype(std::placeholders::_8)  cp8 = std::placeholders::_8;
55 constexpr decltype(std::placeholders::_9)  cp9 = std::placeholders::_9;
56 constexpr decltype(std::placeholders::_10) cp10 = std::placeholders::_10;
57 #endif // TEST_STD_VER >= 11
58
59 int main()
60 {
61     test(std::placeholders::_1);
62     test(std::placeholders::_2);
63     test(std::placeholders::_3);
64     test(std::placeholders::_4);
65     test(std::placeholders::_5);
66     test(std::placeholders::_6);
67     test(std::placeholders::_7);
68     test(std::placeholders::_8);
69     test(std::placeholders::_9);
70     test(std::placeholders::_10);
71 }