|
28 | 28 |
|
29 | 29 | #include "test_basic_format_arg.h"
|
30 | 30 | #include "test_format_context.h"
|
| 31 | +#include "test_iterators.h" |
31 | 32 | #include "make_string.h"
|
32 | 33 | #include "platform_support.h" // locale name macros
|
33 | 34 | #include "test_macros.h"
|
34 | 35 |
|
35 | 36 | template <class OutIt, class CharT>
|
36 | 37 | void test() {
|
37 |
| - static_assert( |
38 |
| - !std::is_copy_constructible_v<std::basic_format_context<OutIt, CharT>>); |
39 |
| - static_assert( |
40 |
| - !std::is_copy_assignable_v<std::basic_format_context<OutIt, CharT>>); |
41 |
| - // The move operations are implicitly deleted due to the |
42 |
| - // deleted copy operations. |
43 |
| - static_assert( |
44 |
| - !std::is_move_constructible_v<std::basic_format_context<OutIt, CharT>>); |
45 |
| - static_assert( |
46 |
| - !std::is_move_assignable_v<std::basic_format_context<OutIt, CharT>>); |
47 |
| - |
48 | 38 | std::basic_string<CharT> string = MAKE_STRING(CharT, "string");
|
49 | 39 | // The type of the object is an exposition only type. The temporary is needed
|
50 | 40 | // to extend the lifetype of the object since args stores a pointer to the
|
@@ -118,6 +108,20 @@ void test() {
|
118 | 108 | #endif
|
119 | 109 | }
|
120 | 110 |
|
| 111 | +// std::back_insert_iterator<std::string>, copyable |
| 112 | +static_assert(std::is_copy_constructible_v<std::basic_format_context<std::back_insert_iterator<std::string>, char>>); |
| 113 | +static_assert(std::is_copy_assignable_v<std::basic_format_context<std::back_insert_iterator<std::string>, char>>); |
| 114 | + |
| 115 | +static_assert(std::is_move_constructible_v<std::basic_format_context<std::back_insert_iterator<std::string>, char>>); |
| 116 | +static_assert(std::is_move_assignable_v<std::basic_format_context<std::back_insert_iterator<std::string>, char>>); |
| 117 | + |
| 118 | +// cpp20_output_iterator, move only |
| 119 | +static_assert(!std::is_copy_constructible_v<std::basic_format_context<cpp20_output_iterator<int*>, char>>); |
| 120 | +static_assert(!std::is_copy_assignable_v<std::basic_format_context<cpp20_output_iterator<int*>, char>>); |
| 121 | + |
| 122 | +static_assert(std::is_move_constructible_v<std::basic_format_context<cpp20_output_iterator<int*>, char>>); |
| 123 | +static_assert(std::is_move_assignable_v<std::basic_format_context<cpp20_output_iterator<int*>, char>>); |
| 124 | + |
121 | 125 | int main(int, char**) {
|
122 | 126 | test<std::back_insert_iterator<std::basic_string<char>>, char>();
|
123 | 127 | #ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
|
0 commit comments