mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 18:09:47 +01:00
Merge bitcoin/bitcoin#27892: refactor: Avoid copy of bilingual_str when formatting, Fix ADL violation
fa8ef7d138
refactor: Avoid copy of bilingual_str when formatting, Fix ADL violation (MarcoFalke) Pull request description: This refactor shouldn't change behavior, but may fix compile errors such as https://github.com/bitcoin/bitcoin/pull/27862#issuecomment-1592516184 ACKs for top commit: achow101: ACKfa8ef7d138
ryanofsky: Code review ACKfa8ef7d138
. Looks great! Thanks for updating hebasto: ACKfa8ef7d138
, I have reviewed the code and it looks OK. Tree-SHA512: 903019962f27b5432b8e3af052b472238ef68d3ee165148c9d2232bf290309075f9f17d8d06c9b5c7fddb89c1a9c3a4c09c6310af01e8561adc0244a30db0857
This commit is contained in:
commit
5b8e07725d
@ -49,22 +49,18 @@ inline bilingual_str Untranslated(std::string original) { return {original, orig
|
||||
|
||||
// Provide an overload of tinyformat::format which can take bilingual_str arguments.
|
||||
namespace tinyformat {
|
||||
inline std::string TranslateArg(const bilingual_str& arg, bool translated)
|
||||
{
|
||||
return translated ? arg.translated : arg.original;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T const& TranslateArg(const T& arg, bool translated)
|
||||
{
|
||||
return arg;
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
bilingual_str format(const bilingual_str& fmt, const Args&... args)
|
||||
{
|
||||
return bilingual_str{format(fmt.original, TranslateArg(args, false)...),
|
||||
format(fmt.translated, TranslateArg(args, true)...)};
|
||||
const auto translate_arg{[](const auto& arg, bool translated) -> const auto& {
|
||||
if constexpr (std::is_same_v<decltype(arg), const bilingual_str&>) {
|
||||
return translated ? arg.translated : arg.original;
|
||||
} else {
|
||||
return arg;
|
||||
}
|
||||
}};
|
||||
return bilingual_str{tfm::format(fmt.original, translate_arg(args, false)...),
|
||||
tfm::format(fmt.translated, translate_arg(args, true)...)};
|
||||
}
|
||||
} // namespace tinyformat
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user