mirror of
https://github.com/fmtlib/fmt.git
synced 2025-11-27 12:49:46 +01:00
Disallow passing non-string-literals to FMT_STRING
This commit is contained in:
@@ -3449,13 +3449,10 @@ template <typename Char> struct udl_arg {
|
||||
}
|
||||
};
|
||||
|
||||
// A constexpr version of strlen.
|
||||
template <typename Char> FMT_CONSTEXPR size_t compute_length(const Char* s) {
|
||||
size_t len = 0;
|
||||
while (*s++) ++len;
|
||||
return len;
|
||||
template <typename Char, size_t N>
|
||||
FMT_CONSTEXPR basic_string_view<Char> literal_to_view(const Char (&s)[N]) {
|
||||
return {s, N - 1};
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
|
||||
inline namespace literals {
|
||||
@@ -3519,7 +3516,8 @@ FMT_END_NAMESPACE
|
||||
using char_type = fmt::remove_cvref_t<decltype(*s)>; \
|
||||
__VA_ARGS__ FMT_CONSTEXPR \
|
||||
operator fmt::basic_string_view<char_type>() const { \
|
||||
return {s, fmt::internal::compute_length(s)}; \
|
||||
/* FMT_STRING only accepts string literals. */ \
|
||||
return fmt::internal::literal_to_view(s); \
|
||||
} \
|
||||
}; \
|
||||
return FMT_STRING(); \
|
||||
@@ -3527,7 +3525,7 @@ FMT_END_NAMESPACE
|
||||
|
||||
/**
|
||||
\rst
|
||||
Constructs a compile-time format string.
|
||||
Constructs a compile-time format string from a string literal *s*.
|
||||
|
||||
**Example**::
|
||||
|
||||
|
||||
Reference in New Issue
Block a user