From 64a74bfadbdc10f8f8e3d0435b19d08de19537d1 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 11 Mar 2025 01:18:09 -0700 Subject: [PATCH] [API] Change the param-pack unpacking order to start from left to right (#3296) * Change the param-pack unpacking order to start from left to right * Add fallback for c++14 and below --- api/include/opentelemetry/logs/logger.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/api/include/opentelemetry/logs/logger.h b/api/include/opentelemetry/logs/logger.h index 519516f297..6bc78f857a 100644 --- a/api/include/opentelemetry/logs/logger.h +++ b/api/include/opentelemetry/logs/logger.h @@ -72,8 +72,23 @@ class Logger return; } - IgnoreTraitResult(detail::LogRecordSetterTrait::type>::Set( - log_record.get(), std::forward(args))...); + // + // Keep the parameter pack unpacking order from left to right because left + // ones are usually more important like severity and event_id than the + // attributes. The left to right unpack order could pass the more important + // data to processors to avoid caching and memory allocating. + // +#if __cplusplus <= 201402L + // C++14 does not support fold expressions for parameter pack expansion. + int dummy[] = {(detail::LogRecordSetterTrait::type>::Set( + log_record.get(), std::forward(args)), + 0)...}; + IgnoreTraitResult(dummy); +#else + IgnoreTraitResult((detail::LogRecordSetterTrait::type>::Set( + log_record.get(), std::forward(args)), + ...)); +#endif EmitLogRecord(std::move(log_record)); }