1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: no-wide-characters
16 #include <type_traits>
18 #include "test_macros.h"
21 #error NULL not defined
25 #error WCHAR_MAX not defined
29 #error WCHAR_MIN not defined
33 #error WEOF not defined
36 // mbstate_t comes from the underlying C library; it is defined (in C99) as:
37 // a complete object type other than an array type that can hold the conversion
38 // state information necessary to convert between sequences of multibyte
39 // characters and wide characters
48 const wchar_t* cws
= 0;
51 ASSERT_SAME_TYPE(int, decltype(fwprintf(fp
, L
"")));
52 ASSERT_SAME_TYPE(int, decltype(fwscanf(fp
, L
"")));
53 ASSERT_SAME_TYPE(int, decltype(swprintf(ws
, s
, L
"")));
54 ASSERT_SAME_TYPE(int, decltype(swscanf(L
"", L
"")));
55 ASSERT_SAME_TYPE(int, decltype(vfwprintf(fp
, L
"", va
)));
56 ASSERT_SAME_TYPE(int, decltype(vfwscanf(fp
, L
"", va
)));
57 ASSERT_SAME_TYPE(int, decltype(vswprintf(ws
, s
, L
"", va
)));
58 ASSERT_SAME_TYPE(int, decltype(vswscanf(L
"", L
"", va
)));
59 ASSERT_SAME_TYPE(wint_t, decltype(fgetwc(fp
)));
60 ASSERT_SAME_TYPE(wchar_t*, decltype(fgetws(ws
, 0, fp
)));
61 ASSERT_SAME_TYPE(wint_t, decltype(fputwc(L
' ', fp
)));
62 ASSERT_SAME_TYPE(int, decltype(fputws(L
"", fp
)));
63 ASSERT_SAME_TYPE(int, decltype(fwide(fp
, 0)));
64 ASSERT_SAME_TYPE(wint_t, decltype(getwc(fp
)));
65 ASSERT_SAME_TYPE(wint_t, decltype(putwc(L
' ', fp
)));
66 ASSERT_SAME_TYPE(wint_t, decltype(ungetwc(L
' ', fp
)));
67 ASSERT_SAME_TYPE(double, decltype(wcstod(L
"", wsp
)));
68 ASSERT_SAME_TYPE(float, decltype(wcstof(L
"", wsp
)));
69 ASSERT_SAME_TYPE(long double, decltype(wcstold(L
"", wsp
)));
70 ASSERT_SAME_TYPE(long, decltype(wcstol(L
"", wsp
, 0)));
71 ASSERT_SAME_TYPE(long long, decltype(wcstoll(L
"", wsp
, 0)));
72 ASSERT_SAME_TYPE(unsigned long, decltype(wcstoul(L
"", wsp
, 0)));
73 ASSERT_SAME_TYPE(unsigned long long, decltype(wcstoull(L
"", wsp
, 0)));
74 ASSERT_SAME_TYPE(wchar_t*, decltype(wcscpy(ws
, L
"")));
75 ASSERT_SAME_TYPE(wchar_t*, decltype(wcsncpy(ws
, L
"", s
)));
76 ASSERT_SAME_TYPE(wchar_t*, decltype(wcscat(ws
, L
"")));
77 ASSERT_SAME_TYPE(wchar_t*, decltype(wcsncat(ws
, L
"", s
)));
78 ASSERT_SAME_TYPE(int, decltype(wcscmp(L
"", L
"")));
79 ASSERT_SAME_TYPE(int, decltype(wcscoll(L
"", L
"")));
80 ASSERT_SAME_TYPE(int, decltype(wcsncmp(L
"", L
"", s
)));
81 ASSERT_SAME_TYPE(size_t, decltype(wcsxfrm(ws
, L
"", s
)));
82 ASSERT_SAME_TYPE(wchar_t*, decltype(wcschr(ws
, L
' ')));
83 ASSERT_SAME_TYPE(const wchar_t*, decltype(wcschr(cws
, L
' ')));
84 ASSERT_SAME_TYPE(size_t, decltype(wcscspn(L
"", L
"")));
85 ASSERT_SAME_TYPE(size_t, decltype(wcslen(L
"")));
86 ASSERT_SAME_TYPE(wchar_t*, decltype(wcspbrk(ws
, L
"")));
87 ASSERT_SAME_TYPE(const wchar_t*, decltype(wcspbrk(cws
, L
"")));
88 ASSERT_SAME_TYPE(wchar_t*, decltype(wcsrchr(ws
, L
' ')));
89 ASSERT_SAME_TYPE(const wchar_t*, decltype(wcsrchr(cws
, L
' ')));
90 ASSERT_SAME_TYPE(size_t, decltype(wcsspn(L
"", L
"")));
91 ASSERT_SAME_TYPE(wchar_t*, decltype(wcsstr(ws
, L
"")));
92 ASSERT_SAME_TYPE(const wchar_t*, decltype(wcsstr(cws
, L
"")));
93 ASSERT_SAME_TYPE(wchar_t*, decltype(wcstok(ws
, L
"", wsp
)));
94 ASSERT_SAME_TYPE(wchar_t*, decltype(wmemchr(ws
, L
' ', s
)));
95 ASSERT_SAME_TYPE(const wchar_t*, decltype(wmemchr(cws
, L
' ', s
)));
96 ASSERT_SAME_TYPE(int, decltype(wmemcmp(L
"", L
"", s
)));
97 ASSERT_SAME_TYPE(wchar_t*, decltype(wmemcpy(ws
, L
"", s
)));
98 ASSERT_SAME_TYPE(wchar_t*, decltype(wmemmove(ws
, L
"", s
)));
99 ASSERT_SAME_TYPE(wchar_t*, decltype(wmemset(ws
, L
' ', s
)));
100 ASSERT_SAME_TYPE(size_t, decltype(wcsftime(ws
, s
, L
"", tm
)));
101 ASSERT_SAME_TYPE(wint_t, decltype(btowc(0)));
102 ASSERT_SAME_TYPE(int, decltype(wctob(w
)));
103 ASSERT_SAME_TYPE(int, decltype(mbsinit(&mb
)));
104 ASSERT_SAME_TYPE(size_t, decltype(mbrlen("", s
, &mb
)));
105 ASSERT_SAME_TYPE(size_t, decltype(mbrtowc(ws
, "", s
, &mb
)));
106 ASSERT_SAME_TYPE(size_t, decltype(wcrtomb(ns
, L
' ', &mb
)));
107 ASSERT_SAME_TYPE(size_t, decltype(mbsrtowcs(ws
, (const char**)0, s
, &mb
)));
108 ASSERT_SAME_TYPE(size_t, decltype(wcsrtombs(ns
, (const wchar_t**)0, s
, &mb
)));
109 ASSERT_SAME_TYPE(wint_t, decltype(getwchar()));
110 ASSERT_SAME_TYPE(int, decltype(vwscanf(L
"", va
)));
111 ASSERT_SAME_TYPE(int, decltype(wscanf(L
"")));
112 ASSERT_SAME_TYPE(wint_t, decltype(putwchar(L
' ')));
113 ASSERT_SAME_TYPE(int, decltype(vwprintf(L
"", va
)));
114 ASSERT_SAME_TYPE(int, decltype(wprintf(L
"")));