1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// test <cstdio> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cstdio> 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <type_traits> 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef BUFSIZ 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error BUFSIZ not defined 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef EOF 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error EOF not defined 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef FILENAME_MAX 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error FILENAME_MAX not defined 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef FOPEN_MAX 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error FOPEN_MAX not defined 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef L_tmpnam 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error L_tmpnam not defined 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef NULL 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error NULL not defined 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef SEEK_CUR 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error SEEK_CUR not defined 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef SEEK_END 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error SEEK_END not defined 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef SEEK_SET 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error SEEK_SET not defined 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef TMP_MAX 52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error TMP_MAX not defined 53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef _IOFBF 56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error _IOFBF not defined 57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef _IOLBF 60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error _IOLBF not defined 61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef _IONBF 64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error _IONBF not defined 65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef stderr 68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error stderr not defined 69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef stdin 72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error stdin not defined 73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef stdout 76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#error stdout not defined 77b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif 78b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 79b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cstdarg> 80b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 81b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#pragma clang diagnostic push 82b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#pragma clang diagnostic ignored "-Wformat-zero-length" 83b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 84b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 85b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 86b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::FILE* fp = 0; 87b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::fpos_t fpos = {0}; 88b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::size_t s = 0; 89b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char* cp = 0; 90b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::va_list va; 91b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::remove("")), int>::value), ""); 92b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::rename("","")), int>::value), ""); 93b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::tmpfile()), std::FILE*>::value), ""); 94b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::tmpnam(cp)), char*>::value), ""); 95b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fclose(fp)), int>::value), ""); 96b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fflush(fp)), int>::value), ""); 97b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fopen("", "")), std::FILE*>::value), ""); 98b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::freopen("", "", fp)), std::FILE*>::value), ""); 99b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::setbuf(fp,cp)), void>::value), ""); 100b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), ""); 101b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fprintf(fp," ")), int>::value), ""); 102b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fscanf(fp,"")), int>::value), ""); 103b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::printf(" ")), int>::value), ""); 104b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::scanf(" ")), int>::value), ""); 105b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::snprintf(cp,0," ")), int>::value), ""); 106b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::sprintf(cp," ")), int>::value), ""); 107b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::sscanf("","")), int>::value), ""); 108b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), ""); 109b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vfscanf(fp,"",va)), int>::value), ""); 110b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vprintf(" ",va)), int>::value), ""); 111b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vscanf("",va)), int>::value), ""); 112b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vsnprintf(cp,0," ",va)), int>::value), ""); 113b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vsprintf(cp," ",va)), int>::value), ""); 114b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::vsscanf("","",va)), int>::value), ""); 115b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fgetc(fp)), int>::value), ""); 116b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fgets(cp,0,fp)), char*>::value), ""); 117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fputc(0,fp)), int>::value), ""); 118b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fputs("",fp)), int>::value), ""); 119b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::getc(fp)), int>::value), ""); 120b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::getchar()), int>::value), ""); 1215de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh#if _LIBCPP_STD_VER <= 11 122b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::gets(cp)), char*>::value), ""); 1235de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh#endif 124b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::putc(0,fp)), int>::value), ""); 125b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::putchar(0)), int>::value), ""); 126b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::puts("")), int>::value), ""); 127b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::ungetc(0,fp)), int>::value), ""); 128b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fread((void*)0,0,0,fp)), std::size_t>::value), ""); 129b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fwrite((const void*)0,0,0,fp)), std::size_t>::value), ""); 130b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fgetpos(fp, &fpos)), int>::value), ""); 131b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fseek(fp, 0,0)), int>::value), ""); 132b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::fsetpos(fp, &fpos)), int>::value), ""); 133b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::ftell(fp)), long>::value), ""); 134b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::rewind(fp)), void>::value), ""); 135b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::clearerr(fp)), void>::value), ""); 136d541f971c9be70175964d4174e1c2417c18321d0Andrew Hsieh#if !defined(feof) 137d541f971c9be70175964d4174e1c2417c18321d0Andrew Hsieh //check return type of feof only if it's not an macro which may be a compound expression 138b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::feof(fp)), int>::value), ""); 139d541f971c9be70175964d4174e1c2417c18321d0Andrew Hsieh#endif 140d541f971c9be70175964d4174e1c2417c18321d0Andrew Hsieh#if !defined(ferror) 141d541f971c9be70175964d4174e1c2417c18321d0Andrew Hsieh //check return type of ferror only if it's not an macro which may be a compound expression 142b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::ferror(fp)), int>::value), ""); 143d541f971c9be70175964d4174e1c2417c18321d0Andrew Hsieh#endif 144b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner static_assert((std::is_same<decltype(std::perror("")), void>::value), ""); 145b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 146