diff --git a/protobuf/echo/TracingEcho.cpp b/protobuf/echo/TracingEcho.cpp index 2f64d9ef4..1f56fbf98 100644 --- a/protobuf/echo/TracingEcho.cpp +++ b/protobuf/echo/TracingEcho.cpp @@ -47,7 +47,7 @@ namespace services { tracer.Continue() << "["; for (auto v : value) - tracer.Continue() << infra::hex << infra::Width(2, 0) << v; + tracer.Continue() << infra::hex << infra::Width(2, '0') << v; tracer.Continue() << "]"; } @@ -168,7 +168,7 @@ namespace services auto save = stream.Reader().ConstructSaveMarker(); auto [contents, methodId] = parser.GetPartialField(); - if (stream.Failed() || (contents.Is() && contents.Get().length <= writerBuffer.max_size() - writerBuffer.size())) + if (stream.Failed() || !contents.Is() || contents.Get().length > writerBuffer.max_size() - writerBuffer.size()) break; if (contents.Is() && contents.Get().length > stream.Available()) diff --git a/protobuf/echo/TracingEcho.hpp b/protobuf/echo/TracingEcho.hpp index 61a60cfba..ddf6622c7 100644 --- a/protobuf/echo/TracingEcho.hpp +++ b/protobuf/echo/TracingEcho.hpp @@ -37,22 +37,17 @@ namespace services PrintField(static_cast(value), tracer); } - template - void PrintSubFields(const T& value, services::Tracer& tracer, typename T::template Type* = 0) + template + void PrintSubFields(const T& value, services::Tracer& tracer, std::index_sequence) { - PrintField(value.Get(std::integral_constant()), tracer); - PrintSubFields(value, tracer); + (void)((PrintField(value.Get(std::integral_constant()), tracer), true) && ...); } - template - void PrintSubFields(const T& value, services::Tracer& tracer, ...) - {} - template void PrintField(const T& value, services::Tracer& tracer, typename T::template Type<0>* = 0) { tracer.Continue() << "{"; - PrintSubFields<0>(value, tracer); + PrintSubFields(value, tracer, std::make_index_sequence{}); tracer.Continue() << "}"; }