diff --git a/api/include/opentelemetry/nostd/unique_ptr.h b/api/include/opentelemetry/nostd/unique_ptr.h index b3f5e61998..3b199894a4 100644 --- a/api/include/opentelemetry/nostd/unique_ptr.h +++ b/api/include/opentelemetry/nostd/unique_ptr.h @@ -175,6 +175,12 @@ bool operator!=(std::nullptr_t, const unique_ptr &rhs) noexcept { return nullptr != rhs.get(); } + +template +unique_ptr make_unique(Args &&...args) +{ + return unique_ptr(new T(std::forward(args)...)); +} } // namespace nostd OPENTELEMETRY_END_NAMESPACE #endif /* OPENTELEMETRY_HAVE_STD_UNIQUE_PTR */ diff --git a/api/include/opentelemetry/std/unique_ptr.h b/api/include/opentelemetry/std/unique_ptr.h index 4b25b7c381..947734bd7b 100644 --- a/api/include/opentelemetry/std/unique_ptr.h +++ b/api/include/opentelemetry/std/unique_ptr.h @@ -18,5 +18,16 @@ namespace nostd template using unique_ptr = std::unique_ptr<_Types...>; +#if (defined(__cplusplus) && __cplusplus >= 201402L) || \ + (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) +using std::make_unique; +#else +template +unique_ptr make_unique(Args &&...args) +{ + return unique_ptr(new T(std::forward(args)...)); +} +#endif + } // namespace nostd OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/memory/src/in_memory_metric_exporter_factory.cc b/exporters/memory/src/in_memory_metric_exporter_factory.cc index f2577c4e9b..aca2cce251 100644 --- a/exporters/memory/src/in_memory_metric_exporter_factory.cc +++ b/exporters/memory/src/in_memory_metric_exporter_factory.cc @@ -3,6 +3,7 @@ #include "opentelemetry/exporters/memory/in_memory_metric_exporter_factory.h" #include "opentelemetry/exporters/memory/in_memory_metric_data.h" +#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" @@ -49,7 +50,7 @@ class InMemoryMetricExporter final : public sdk::metrics::PushMetricExporter OTEL_INTERNAL_LOG_ERROR("[In Memory Metric Exporter] Exporting failed, exporter is shutdown"); return ExportResult::kFailure; } - data_->Add(std::make_unique(data)); + data_->Add(opentelemetry::nostd::make_unique(data)); return ExportResult::kSuccess; } @@ -85,7 +86,7 @@ std::unique_ptr InMemoryMetricExporterFactory::Create( const std::shared_ptr &data, const AggregationTemporalitySelector &temporality) { - return std::make_unique(data, temporality); + return opentelemetry::nostd::make_unique(data, temporality); } } // namespace memory diff --git a/exporters/memory/test/in_memory_metric_data_test.cc b/exporters/memory/test/in_memory_metric_data_test.cc index ffaba2cfb9..c2df83226b 100644 --- a/exporters/memory/test/in_memory_metric_data_test.cc +++ b/exporters/memory/test/in_memory_metric_data_test.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/memory/in_memory_metric_data.h" +#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/resource/resource.h" @@ -23,7 +24,7 @@ TEST(InMemoryMetricDataTest, CircularBuffer) { CircularBufferInMemoryMetricData buf(10); Resource resource = Resource::GetEmpty(); - buf.Add(std::make_unique( + buf.Add(opentelemetry::nostd::make_unique( &resource, std::vector{{nullptr, std::vector{}}})); EXPECT_EQ((*buf.Get().begin())->resource_, &resource); } @@ -45,7 +46,7 @@ TEST(InMemoryMetricDataTest, SimpleAggregate) md.instrument_descriptor.name_ = "my-metric"; md.point_data_attr_.push_back(pda); - agg.Add(std::make_unique( + agg.Add(opentelemetry::nostd::make_unique( &resource, std::vector{{scope.get(), std::vector{md}}})); auto it = agg.Get("my-scope", "my-metric").begin();