diff --git a/format.cc b/format.cc index 1a6e4e22..62d401d4 100644 --- a/format.cc +++ b/format.cc @@ -147,7 +147,7 @@ typedef void (*FormatFunc)(fmt::Writer &, int, fmt::StringRef); // Buffer should be at least of size 1. int safe_strerror( int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT { - assert(buffer != 0 && buffer_size != 0); + assert(buffer != nullptr && buffer_size != 0); int result = 0; #if ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE) || __ANDROID__ // XSI-compliant version of strerror_r. @@ -457,7 +457,7 @@ FMT_FUNC void fmt::internal::report_unknown_type(char code, const char *type) { FMT_FUNC fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) { int length = MultiByteToWideChar( - CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), -1, 0, 0); + CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), -1, nullptr, 0); static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16"; if (length == 0) FMT_THROW(WindowsError(GetLastError(), ERROR_MSG)); @@ -476,12 +476,12 @@ FMT_FUNC fmt::internal::UTF16ToUTF8::UTF16ToUTF8(fmt::WStringRef s) { } FMT_FUNC int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) { - int length = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, 0, 0, 0, 0); + int length = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, nullptr, 0, nullptr, nullptr); if (length == 0) return GetLastError(); buffer_.resize(length); length = WideCharToMultiByte( - CP_UTF8, 0, s.c_str(), -1, &buffer_[0], length, 0, 0); + CP_UTF8, 0, s.c_str(), -1, &buffer_[0], length, nullptr, nullptr); if (length == 0) return GetLastError(); return 0; @@ -536,9 +536,9 @@ FMT_FUNC void fmt::internal::format_windows_error( FMT_TRY { String system_message; if (FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0, + FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - reinterpret_cast(system_message.ptr()), 0, 0)) { + reinterpret_cast(system_message.ptr()), 0, nullptr)) { UTF16ToUTF8 utf8_message; if (utf8_message.convert(system_message.c_str()) == ERROR_SUCCESS) { out << message << ": " << utf8_message; @@ -648,7 +648,7 @@ void fmt::BasicWriter::write_str( template inline Arg fmt::BasicFormatter::parse_arg_index(const Char *&s) { - const char *error = 0; + const char *error = nullptr; Arg arg = *s < '0' || *s > '9' ? next_arg(error) : get_arg(parse_nonnegative_int(s), error); if (error) { @@ -713,7 +713,7 @@ void fmt::internal::PrintfFormatter::parse_flags( template Arg fmt::internal::PrintfFormatter::get_arg( const Char *s, unsigned arg_index) { - const char *error = 0; + const char *error = nullptr; Arg arg = arg_index == UINT_MAX ? next_arg(error) : FormatterBase::get_arg(arg_index - 1, error); if (error) @@ -1119,7 +1119,7 @@ FMT_FUNC void fmt::print_colored(Color c, StringRef format, ArgList args) { if (!GetConsoleScreenBufferInfo(handle, &info_con)) FMT_THROW(WindowsError(GetLastError(), "cannot get console information")); WORD reset_color = info_con.wAttributes; - WORD color = static_cast(c) >= ARRAYSIZE(WIN32_COLORS) ? reset_color : WIN32_COLORS[c]; + WORD color = static_cast(c) >= ARRAYSIZE(WIN32_COLORS) ? reset_color : WIN32_COLORS[c]; if (!SetConsoleTextAttribute(handle, color)) FMT_THROW(WindowsError(GetLastError(), "cannot set console color")); print(format, args); diff --git a/format.h b/format.h index 8ac48074..8a923b57 100644 --- a/format.h +++ b/format.h @@ -92,7 +92,7 @@ // since version 2013. # define FMT_USE_VARIADIC_TEMPLATES \ (FMT_HAS_FEATURE(cxx_variadic_templates) || \ - (FMT_GCC_VERSION >= 404 && __cplusplus >= 201103) || _MSC_VER >= 1800) + (FMT_GCC_VERSION >= 404 && __cplusplus >= 201103L) || _MSC_VER >= 1800) #endif #ifndef FMT_USE_RVALUE_REFERENCES @@ -103,7 +103,7 @@ # else # define FMT_USE_RVALUE_REFERENCES \ (FMT_HAS_FEATURE(cxx_rvalue_references) || \ - (FMT_GCC_VERSION >= 403 && __cplusplus >= 201103) || _MSC_VER >= 1600) + (FMT_GCC_VERSION >= 403 && __cplusplus >= 201103L) || _MSC_VER >= 1600) # endif #endif @@ -113,7 +113,7 @@ // Define FMT_USE_NOEXCEPT to make C++ Format use noexcept (C++11 feature). #if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ - (FMT_GCC_VERSION >= 408 && __cplusplus >= 201103) + (FMT_GCC_VERSION >= 408 && __cplusplus >= 201103L) # define FMT_NOEXCEPT noexcept # define FMT_NOEXCEPT_EXPR(expr) noexcept(expr) #else @@ -124,7 +124,7 @@ // A macro to disallow the copy constructor and operator= functions // This should be used in the private: declarations for a class #if FMT_HAS_FEATURE(cxx_deleted_functions)\ - || (FMT_GCC_VERSION >= 404 && __cplusplus >= 201103)\ + || (FMT_GCC_VERSION >= 404 && __cplusplus >= 201103L)\ || (_MSC_VER >= 1800) #define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&) = delete; \ @@ -135,6 +135,32 @@ void operator=(const TypeName&) #endif +#if FMT_HAS_FEATURE(cxx_nullptr)\ + || (FMT_GCC_VERSION >= 406 && __cplusplus >= 201103L)\ + || (_MSC_VER >= 1600) +// Use nullptr +#else +// Simulate it +namespace std { +class nullptr_t { +public: + template + operator T*() const { + return 0; + } + template + operator T C::*() const + { + return 0; + } +private: + void operator&() const; +}; +} + +std::nullptr_t const nullptr = {}; +#endif + namespace fmt { // Fix the warning about long long on older versions of GCC @@ -273,7 +299,7 @@ class Buffer { std::size_t size_; std::size_t capacity_; - Buffer(T *ptr = 0, std::size_t capacity = 0) + Buffer(T *ptr = nullptr, std::size_t capacity = 0) : ptr_(ptr), size_(0), capacity_(capacity) {} virtual void grow(std::size_t size) = 0; diff --git a/posix.cc b/posix.cc index 43a6d15e..5415039b 100644 --- a/posix.cc +++ b/posix.cc @@ -92,7 +92,7 @@ void fmt::BufferedFile::close() { if (!file_) return; int result = FMT_SYSTEM(fclose(file_)); - file_ = 0; + file_ = nullptr; if (result != 0) throw SystemError(errno, "cannot close file"); } diff --git a/posix.h b/posix.h index 0dcc2960..b1b3a245 100644 --- a/posix.h +++ b/posix.h @@ -113,7 +113,7 @@ class BufferedFile { public: // Constructs a BufferedFile object which doesn't represent any file. - BufferedFile() FMT_NOEXCEPT : file_(0) {} + BufferedFile() FMT_NOEXCEPT : file_(nullptr) {} // Destroys the object closing the file it represents if any. ~BufferedFile() FMT_NOEXCEPT; @@ -167,13 +167,13 @@ public: public: BufferedFile(BufferedFile &&other) FMT_NOEXCEPT : file_(other.file_) { - other.file_ = 0; + other.file_ = nullptr; } BufferedFile& operator=(BufferedFile &&other) { close(); file_ = other.file_; - other.file_ = 0; + other.file_ = nullptr; return *this; } #endif @@ -182,13 +182,13 @@ public: BufferedFile(fmt::StringRef filename, fmt::StringRef mode); // Gets whether a file is opened - bool is_open() const FMT_NOEXCEPT { return file_ != 0; } + bool is_open() const FMT_NOEXCEPT { return file_ != nullptr; } // Closes the file. void close(); // Returns the pointer to a FILE object representing this file. - FILE *get() const FMT_NOEXCEPT{ return file_; } + FILE *get() const FMT_NOEXCEPT { return file_; } // Gets the file number of a file int fileno() const; @@ -198,14 +198,14 @@ public: // Writes raw string without formatting std::size_t write_raw(fmt::StringRef str) { - // FIXME: throw exception when failing + // TODO: throw exception when failing if (!is_open()) return 0; return ::fwrite(str.c_str(), str.size(), 1, file_); } // Writes a single charactor without formatting void write_raw(char c) { - // FIXME: throw exception when failing + // TODO: throw exception when failing if (!is_open()) return; ::fputc(c, file_);