1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// <wchar.h>
#include <wchar.h>
#include <stdarg.h>
#include <stdio.h>
#include <type_traits>
#include "test_macros.h"
#ifndef NULL
#error NULL not defined
#endif
#ifndef WCHAR_MAX
#error WCHAR_MAX not defined
#endif
#ifndef WCHAR_MIN
#error WCHAR_MIN not defined
#endif
#ifndef WEOF
#error WEOF not defined
#endif
int main(int, char**)
{
// mbstate_t comes from the underlying C library; it is defined (in C99) as:
// a complete object type other than an array type that can hold the conversion
// state information necessary to convert between sequences of multibyte
// characters and wide characters
mbstate_t mb = {};
size_t s = 0;
tm *tm = 0;
wint_t w = 0;
::FILE* fp = 0;
::va_list va;
char* ns = 0;
wchar_t* ws = 0;
const wchar_t* cws = 0;
wchar_t** wsp = 0;
((void)mb); // Prevent unused warning
((void)s); // Prevent unused warning
((void)tm); // Prevent unused warning
((void)w); // Prevent unused warning
((void)fp); // Prevent unused warning
((void)va); // Prevent unused warning
((void)ns); // Prevent unused warning
((void)ws); // Prevent unused warning
((void)cws); // Prevent unused warning
((void)wsp); // Prevent unused warning
ASSERT_SAME_TYPE(int, decltype(fwprintf(fp, L"")));
ASSERT_SAME_TYPE(int, decltype(fwscanf(fp, L"")));
ASSERT_SAME_TYPE(int, decltype(swprintf(ws, s, L"")));
ASSERT_SAME_TYPE(int, decltype(swscanf(L"", L"")));
ASSERT_SAME_TYPE(int, decltype(vfwprintf(fp, L"", va)));
ASSERT_SAME_TYPE(int, decltype(vfwscanf(fp, L"", va)));
ASSERT_SAME_TYPE(int, decltype(vswprintf(ws, s, L"", va)));
ASSERT_SAME_TYPE(int, decltype(vswscanf(L"", L"", va)));
ASSERT_SAME_TYPE(wint_t, decltype(fgetwc(fp)));
ASSERT_SAME_TYPE(wchar_t*, decltype(fgetws(ws, 0, fp)));
ASSERT_SAME_TYPE(wint_t, decltype(fputwc(L' ', fp)));
ASSERT_SAME_TYPE(int, decltype(fputws(L"", fp)));
ASSERT_SAME_TYPE(int, decltype(fwide(fp, 0)));
ASSERT_SAME_TYPE(wint_t, decltype(getwc(fp)));
ASSERT_SAME_TYPE(wint_t, decltype(putwc(L' ', fp)));
ASSERT_SAME_TYPE(wint_t, decltype(ungetwc(L' ', fp)));
ASSERT_SAME_TYPE(double, decltype(wcstod(L"", wsp)));
ASSERT_SAME_TYPE(float, decltype(wcstof(L"", wsp)));
ASSERT_SAME_TYPE(long double, decltype(wcstold(L"", wsp)));
ASSERT_SAME_TYPE(long, decltype(wcstol(L"", wsp, 0)));
ASSERT_SAME_TYPE(long long, decltype(wcstoll(L"", wsp, 0)));
ASSERT_SAME_TYPE(unsigned long, decltype(wcstoul(L"", wsp, 0)));
ASSERT_SAME_TYPE(unsigned long long, decltype(wcstoull(L"", wsp, 0)));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcscpy(ws, L"")));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcsncpy(ws, L"", s)));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcscat(ws, L"")));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcsncat(ws, L"", s)));
ASSERT_SAME_TYPE(int, decltype(wcscmp(L"", L"")));
ASSERT_SAME_TYPE(int, decltype(wcscoll(L"", L"")));
ASSERT_SAME_TYPE(int, decltype(wcsncmp(L"", L"", s)));
ASSERT_SAME_TYPE(size_t, decltype(wcsxfrm(ws, L"", s)));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcschr(ws, L' ')));
ASSERT_SAME_TYPE(const wchar_t*, decltype(wcschr(cws, L' ')));
ASSERT_SAME_TYPE(size_t, decltype(wcscspn(L"", L"")));
ASSERT_SAME_TYPE(size_t, decltype(wcslen(L"")));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcspbrk(ws, L"")));
ASSERT_SAME_TYPE(const wchar_t*, decltype(wcspbrk(cws, L"")));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcsrchr(ws, L' ')));
ASSERT_SAME_TYPE(const wchar_t*, decltype(wcsrchr(cws, L' ')));
ASSERT_SAME_TYPE(size_t, decltype(wcsspn(L"", L"")));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcsstr(ws, L"")));
ASSERT_SAME_TYPE(const wchar_t*, decltype(wcsstr(cws, L"")));
ASSERT_SAME_TYPE(wchar_t*, decltype(wcstok(ws, L"", wsp)));
ASSERT_SAME_TYPE(wchar_t*, decltype(wmemchr(ws, L' ', s)));
ASSERT_SAME_TYPE(const wchar_t*, decltype(wmemchr(cws, L' ', s)));
ASSERT_SAME_TYPE(int, decltype(wmemcmp(L"", L"", s)));
ASSERT_SAME_TYPE(wchar_t*, decltype(wmemcpy(ws, L"", s)));
ASSERT_SAME_TYPE(wchar_t*, decltype(wmemmove(ws, L"", s)));
ASSERT_SAME_TYPE(wchar_t*, decltype(wmemset(ws, L' ', s)));
ASSERT_SAME_TYPE(size_t, decltype(wcsftime(ws, s, L"", tm)));
ASSERT_SAME_TYPE(wint_t, decltype(btowc(0)));
ASSERT_SAME_TYPE(int, decltype(wctob(w)));
ASSERT_SAME_TYPE(int, decltype(mbsinit(&mb)));
ASSERT_SAME_TYPE(size_t, decltype(mbrlen("", s, &mb)));
ASSERT_SAME_TYPE(size_t, decltype(mbrtowc(ws, "", s, &mb)));
ASSERT_SAME_TYPE(size_t, decltype(wcrtomb(ns, L' ', &mb)));
ASSERT_SAME_TYPE(size_t, decltype(mbsrtowcs(ws, (const char**)0, s, &mb)));
ASSERT_SAME_TYPE(size_t, decltype(wcsrtombs(ns, (const wchar_t**)0, s, &mb)));
#ifndef _LIBCPP_HAS_NO_STDIN
ASSERT_SAME_TYPE(wint_t, decltype(getwchar()));
ASSERT_SAME_TYPE(int, decltype(vwscanf(L"", va)));
ASSERT_SAME_TYPE(int, decltype(wscanf(L"")));
#endif
#ifndef _LIBCPP_HAS_NO_STDOUT
ASSERT_SAME_TYPE(wint_t, decltype(putwchar(L' ')));
ASSERT_SAME_TYPE(int, decltype(vwprintf(L"", va)));
ASSERT_SAME_TYPE(int, decltype(wprintf(L"")));
#endif
return 0;
}
|