From 08c76b1da6e132b1e91f82136a8647f71f774904 Mon Sep 17 00:00:00 2001 From: Nolan Poe Date: Fri, 15 Mar 2024 19:21:08 -0700 Subject: [PATCH] Fix GCC14 warnings on template specialization syntax (#4974) (#4975) --- src/V3OptionParser.cpp | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/V3OptionParser.cpp b/src/V3OptionParser.cpp index b1855c462..e0d7fbd04 100644 --- a/src/V3OptionParser.cpp +++ b/src/V3OptionParser.cpp @@ -114,16 +114,33 @@ V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbCall, void(void), m_cb(), en::NONE); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbFOnOff, void(bool), m_cb(!hasPrefixFNo(optp)), en::FONOFF); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbOnOff, void(bool), m_cb(!hasPrefixNo(optp)), en::ONOFF); -template <> -V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbVal, void(int), m_cb(std::atoi(argp)), en::VALUE); -template <> -V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbVal, void(const char*), m_cb(argp), - en::VALUE); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbPartialMatch, void(const char*), m_cb(optp), en::NONE, true); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbPartialMatchVal, void(const char*, const char*), m_cb(optp, argp), en::VALUE, true); +template <> +class V3OptionParser::Impl::ActionCbVal final : public ActionBase { + std::function m_cb; + +public: + using CbType = std::function; + explicit ActionCbVal(CbType cb) + : m_cb(std::move(cb)) {} + void exec(const char* optp, const char* argp) override { m_cb(std::atoi(argp)); } +}; + +template <> +class V3OptionParser::Impl::ActionCbVal final : public ActionBase { + std::function m_cb; + +public: + using CbType = std::function; + explicit ActionCbVal(CbType cb) + : m_cb(std::move(cb)) {} + void exec(const char* optp, const char* argp) override { m_cb(argp); } +}; + #undef V3OPTION_PARSER_DEF_ACT_CB_CLASS //######################################################################