aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/string/format_string-inl.h
diff options
context:
space:
mode:
authorarkady-e1ppa <arkady-e1ppa@yandex-team.com>2024-06-13 16:50:14 +0300
committerarkady-e1ppa <arkady-e1ppa@yandex-team.com>2024-06-13 17:13:41 +0300
commit3a8a5fac5ba669fa5bed1ccd92e75bdfc6d30d21 (patch)
tree6282648de72746e2de7193e12ecc3ee7e4ad40f5 /library/cpp/yt/string/format_string-inl.h
parent3021b75cb7c16df7e4c99f77ef1509c72a79c876 (diff)
downloadydb-3a8a5fac5ba669fa5bed1ccd92e75bdfc6d30d21.tar.gz
YT-21868: Enable stat analysis in some other places
We slightly rework inner workings of stat analysis. For almost any sane use case the behavior is identical, but should compile a little faster. If you send string literals like `char[N]` or `const char*` make them constexpr. If you can't (e.g. `ex.what()` case) wrap it in `TStringBuf`, if you want the "by the book; 100% right" solution then wrap it in `TRuntimeFormat` instead. `SetRequestInfo` methods now statically checks the format. Only one error was found -- hooray! Some other internal stuff was added, a lot removed -- don't worry about it. You won't be able to see the difference 62050dfe8a9cedc1289f18e80397ff33a8e2ecdb
Diffstat (limited to 'library/cpp/yt/string/format_string-inl.h')
-rw-r--r--library/cpp/yt/string/format_string-inl.h26
1 files changed, 17 insertions, 9 deletions
diff --git a/library/cpp/yt/string/format_string-inl.h b/library/cpp/yt/string/format_string-inl.h
index 5187a2ac6b..a692d9648d 100644
--- a/library/cpp/yt/string/format_string-inl.h
+++ b/library/cpp/yt/string/format_string-inl.h
@@ -11,7 +11,7 @@ namespace NYT {
template <class... TArgs>
template <class T>
requires std::constructible_from<std::string_view, T>
-consteval TBasicStaticFormat<TArgs...>::TBasicStaticFormat(const T& fmt)
+consteval TBasicFormatString<TArgs...>::TBasicFormatString(const T& fmt)
: Format_(fmt)
{
CheckFormattability();
@@ -21,13 +21,13 @@ consteval TBasicStaticFormat<TArgs...>::TBasicStaticFormat(const T& fmt)
}
template <class... TArgs>
-TStringBuf TBasicStaticFormat<TArgs...>::Get() const noexcept
+TStringBuf TBasicFormatString<TArgs...>::Get() const noexcept
{
return {Format_};
}
template <class... TArgs>
-consteval void TBasicStaticFormat<TArgs...>::CheckFormattability()
+consteval void TBasicFormatString<TArgs...>::CheckFormattability()
{
#if !defined(NDEBUG) && !defined(YT_DISABLE_FORMAT_STATIC_ANALYSIS)
using TTuple = std::tuple<std::remove_cvref_t<TArgs>...>;
@@ -42,13 +42,21 @@ consteval void TBasicStaticFormat<TArgs...>::CheckFormattability()
#endif
}
-inline TRuntimeFormat::TRuntimeFormat(TStringBuf fmt)
- : Format_(fmt)
-{ }
-
-inline TStringBuf TRuntimeFormat::Get() const noexcept
+template <class... TArgs>
+TBasicFormatString<TArgs...>::TBasicFormatString(TRuntimeFormat fmt)
+ : Format_(fmt.Get())
{
- return Format_;
+ // NB(arkady-e1ppa): StaticFormat performs the
+ // formattability check of the args in a way
+ // that provides more useful information
+ // than a simple static_assert with conjunction.
+ // Additionally, the latter doesn't work properly
+ // for older clang version.
+ static constexpr auto argsChecker = [] {
+ CheckFormattability();
+ return 42;
+ } ();
+ Y_UNUSED(argsChecker);
}
////////////////////////////////////////////////////////////////////////////////