Skip to content

Commit

Permalink
Fixed clang -Wreserved-identifier warings
Browse files Browse the repository at this point in the history
Created FMT_UNCHECKED_TYPE that resolves to special identifier _Unchecked_type for Microsoft, but to a dummy string otherwise. Using
_Unchecked_type is invalid because underscore + uppercase is a reserved identifier.
  • Loading branch information
seanm committed Mar 15, 2022
1 parent 749ec30 commit 9adbbcd
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 4 deletions.
3 changes: 1 addition & 2 deletions include/fmt/compile.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ template <typename OutputIt> class truncating_iterator_base {
using difference_type = std::ptrdiff_t;
using pointer = void;
using reference = void;
using _Unchecked_type =
truncating_iterator_base; // Mark iterator as checked.
FMT_UNCHECKED_ITERATOR(truncating_iterator_base);

OutputIt base() const { return out_; }
size_t count() const { return count_; }
Expand Down
9 changes: 8 additions & 1 deletion include/fmt/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,13 @@
# endif
#endif

#ifdef _MSC_VER
# define FMT_UNCHECKED_ITERATOR(It) \
using _Unchecked_type = It // Mark iterator as checked.
#else
# define FMT_UNCHECKED_ITERATOR(It) using DummyTypeName = It
#endif

#ifndef FMT_BEGIN_NAMESPACE
# define FMT_BEGIN_NAMESPACE \
namespace fmt { \
Expand Down Expand Up @@ -1498,7 +1505,7 @@ class appender : public std::back_insert_iterator<detail::buffer<char>> {
public:
using std::back_insert_iterator<detail::buffer<char>>::back_insert_iterator;
appender(base it) noexcept : base(it) {}
using _Unchecked_type = appender; // Mark iterator as checked.
FMT_UNCHECKED_ITERATOR(appender);

auto operator++() noexcept -> appender& { return *this; }

Expand Down
2 changes: 1 addition & 1 deletion include/fmt/format.h
Original file line number Diff line number Diff line change
Expand Up @@ -1842,7 +1842,7 @@ class counting_iterator {
using difference_type = std::ptrdiff_t;
using pointer = void;
using reference = void;
using _Unchecked_type = counting_iterator; // Mark iterator as checked.
FMT_UNCHECKED_ITERATOR(counting_iterator);

struct value_type {
template <typename T> void operator=(const T&) {}
Expand Down

0 comments on commit 9adbbcd

Please sign in to comment.