Skip to content

Commit 64a74bf

Browse files
authored
[API] Change the param-pack unpacking order to start from left to right (open-telemetry#3296)
* Change the param-pack unpacking order to start from left to right * Add fallback for c++14 and below
1 parent edfeabe commit 64a74bf

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

api/include/opentelemetry/logs/logger.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,23 @@ class Logger
7272
return;
7373
}
7474

75-
IgnoreTraitResult(detail::LogRecordSetterTrait<typename std::decay<ArgumentType>::type>::Set(
76-
log_record.get(), std::forward<ArgumentType>(args))...);
75+
//
76+
// Keep the parameter pack unpacking order from left to right because left
77+
// ones are usually more important like severity and event_id than the
78+
// attributes. The left to right unpack order could pass the more important
79+
// data to processors to avoid caching and memory allocating.
80+
//
81+
#if __cplusplus <= 201402L
82+
// C++14 does not support fold expressions for parameter pack expansion.
83+
int dummy[] = {(detail::LogRecordSetterTrait<typename std::decay<ArgumentType>::type>::Set(
84+
log_record.get(), std::forward<ArgumentType>(args)),
85+
0)...};
86+
IgnoreTraitResult(dummy);
87+
#else
88+
IgnoreTraitResult((detail::LogRecordSetterTrait<typename std::decay<ArgumentType>::type>::Set(
89+
log_record.get(), std::forward<ArgumentType>(args)),
90+
...));
91+
#endif
7792

7893
EmitLogRecord(std::move(log_record));
7994
}

0 commit comments

Comments
 (0)