diff --git a/include/spdlog/common.h b/include/spdlog/common.h index 1542fa92..379a6d75 100644 --- a/include/spdlog/common.h +++ b/include/spdlog/common.h @@ -174,4 +174,17 @@ using filename_t = std::string; { \ err_handler_("Unknown exeption in logger"); \ } + +// +// make_unique support +// +#if __cplusplus >= 201402L // C++14 and beyond +using std::make_unique; +#else +template +std::unique_ptr make_unique(Args &&... args) +{ + return std::unique_ptr(new T(std::forward(args)...)); +} +#endif } // namespace spdlog diff --git a/include/spdlog/details/pattern_formatter.h b/include/spdlog/details/pattern_formatter.h index dd352ae5..2d73cacf 100644 --- a/include/spdlog/details/pattern_formatter.h +++ b/include/spdlog/details/pattern_formatter.h @@ -547,7 +547,7 @@ public: std::unique_ptr clone() const override { - return std::unique_ptr(new pattern_formatter(pattern_, pattern_time_type_, eol_)); + return spdlog::make_unique(pattern_, pattern_time_type_, eol_); } void format(const details::log_msg &msg, fmt::memory_buffer &dest) override @@ -588,146 +588,145 @@ private: void handle_flag_(char flag) { - using flag_formatter_ptr = std::unique_ptr; switch (flag) { // logger name case 'n': - formatters_.push_back(flag_formatter_ptr(new details::name_formatter())); + formatters_.push_back(make_unique()); break; case 'l': - formatters_.push_back(flag_formatter_ptr(new details::level_formatter())); + formatters_.push_back(make_unique()); break; case 'L': - formatters_.push_back(flag_formatter_ptr(new details::short_level_formatter())); + formatters_.push_back(make_unique()); break; case ('t'): - formatters_.push_back(flag_formatter_ptr(new details::t_formatter())); + formatters_.push_back(make_unique()); break; case ('v'): - formatters_.push_back(flag_formatter_ptr(new details::v_formatter())); + formatters_.push_back(make_unique()); break; case ('a'): - formatters_.push_back(flag_formatter_ptr(new details::a_formatter())); + formatters_.push_back(make_unique()); break; case ('A'): - formatters_.push_back(flag_formatter_ptr(new details::A_formatter())); + formatters_.push_back(make_unique()); break; case ('b'): case ('h'): - formatters_.push_back(flag_formatter_ptr(new details::b_formatter())); + formatters_.push_back(make_unique()); break; case ('B'): - formatters_.push_back(flag_formatter_ptr(new details::B_formatter())); + formatters_.push_back(make_unique()); break; case ('c'): - formatters_.push_back(flag_formatter_ptr(new details::c_formatter())); + formatters_.push_back(make_unique()); break; case ('C'): - formatters_.push_back(flag_formatter_ptr(new details::C_formatter())); + formatters_.push_back(make_unique()); break; case ('Y'): - formatters_.push_back(flag_formatter_ptr(new details::Y_formatter())); + formatters_.push_back(make_unique()); break; case ('D'): case ('x'): - formatters_.push_back(flag_formatter_ptr(new details::D_formatter())); + formatters_.push_back(make_unique()); break; case ('m'): - formatters_.push_back(flag_formatter_ptr(new details::m_formatter())); + formatters_.push_back(make_unique()); break; case ('d'): - formatters_.push_back(flag_formatter_ptr(new details::d_formatter())); + formatters_.push_back(make_unique()); break; case ('H'): - formatters_.push_back(flag_formatter_ptr(new details::H_formatter())); + formatters_.push_back(make_unique()); break; case ('I'): - formatters_.push_back(flag_formatter_ptr(new details::I_formatter())); + formatters_.push_back(make_unique()); break; case ('M'): - formatters_.push_back(flag_formatter_ptr(new details::M_formatter())); + formatters_.push_back(make_unique()); break; case ('S'): - formatters_.push_back(flag_formatter_ptr(new details::S_formatter())); + formatters_.push_back(make_unique()); break; case ('e'): - formatters_.push_back(flag_formatter_ptr(new details::e_formatter())); + formatters_.push_back(make_unique()); break; case ('f'): - formatters_.push_back(flag_formatter_ptr(new details::f_formatter())); + formatters_.push_back(make_unique()); break; case ('F'): - formatters_.push_back(flag_formatter_ptr(new details::F_formatter())); + formatters_.push_back(make_unique()); break; case ('E'): - formatters_.push_back(flag_formatter_ptr(new details::E_formatter())); + formatters_.push_back(make_unique()); break; case ('p'): - formatters_.push_back(flag_formatter_ptr(new details::p_formatter())); + formatters_.push_back(make_unique()); break; case ('r'): - formatters_.push_back(flag_formatter_ptr(new details::r_formatter())); + formatters_.push_back(make_unique()); break; case ('R'): - formatters_.push_back(flag_formatter_ptr(new details::R_formatter())); + formatters_.push_back(make_unique()); break; case ('T'): case ('X'): - formatters_.push_back(flag_formatter_ptr(new details::T_formatter())); + formatters_.push_back(make_unique()); break; case ('z'): - formatters_.push_back(flag_formatter_ptr(new details::z_formatter())); + formatters_.push_back(make_unique()); break; case ('+'): - formatters_.push_back(flag_formatter_ptr(new details::full_formatter())); + formatters_.push_back(make_unique()); break; case ('P'): - formatters_.push_back(flag_formatter_ptr(new details::pid_formatter())); + formatters_.push_back(make_unique()); break; case ('i'): - formatters_.push_back(flag_formatter_ptr(new details::i_formatter())); + formatters_.push_back(make_unique()); break; case ('^'): - formatters_.push_back(flag_formatter_ptr(new details::color_start_formatter())); + formatters_.push_back(make_unique()); break; case ('$'): - formatters_.push_back(flag_formatter_ptr(new details::color_stop_formatter())); + formatters_.push_back(make_unique()); break; default: // Unknown flag appears as is - formatters_.push_back(flag_formatter_ptr(new details::ch_formatter('%'))); - formatters_.push_back(flag_formatter_ptr(new details::ch_formatter(flag))); + formatters_.push_back(make_unique('%')); + formatters_.push_back(make_unique(flag)); break; } } @@ -758,7 +757,7 @@ private: { if (!user_chars) { - user_chars = std::unique_ptr(new details::aggregate_formatter()); + user_chars = spdlog::make_unique(); } user_chars->add_ch(*it); } diff --git a/include/spdlog/details/registry.h b/include/spdlog/details/registry.h index 3988552a..bbe083e2 100644 --- a/include/spdlog/details/registry.h +++ b/include/spdlog/details/registry.h @@ -113,7 +113,7 @@ public: { std::lock_guard lock(flusher_mutex_); std::function clbk = std::bind(®istry::flush_all, this); - periodic_flusher_.reset(new periodic_worker(clbk, interval)); + periodic_flusher_ = make_unique(clbk, interval); } void set_error_handler(log_err_handler handler)