@@ -504,7 +504,7 @@ class CheckerFrontend {
504504 assert (!Name && " Checker part registered twice!" );
505505 Name = Mgr.getCurrentCheckerName ();
506506 }
507- bool isEnabled () const { return static_cast < bool >( Name); }
507+ bool isEnabled () const { return Name. has_value ( ); }
508508 CheckerNameRef getName () const { return *Name; }
509509};
510510
@@ -529,17 +529,6 @@ class CheckerBase : public CheckerFrontend, public CheckerBackend {
529529 StringRef getTagDescription () const override ;
530530};
531531
532- // Template magic to implement the static method `_register()` which registers
533- // the `Checker` or `CheckerFamily` for all the implemented callbacks.
534- template <typename CHECKER, typename CHECK1, typename ... CHECKs>
535- static void registerImpl (CHECKER *Chk, CheckerManager &Mgr) {
536- CHECK1::_register (Chk, Mgr);
537- registerImpl<CHECKER, CHECKs...>(Chk, Mgr);
538- }
539-
540- template <typename CHECKER>
541- static void registerImpl (CHECKER *Chk, CheckerManager &Mgr) {}
542-
543532// / Simple checker classes that implement one frontend (i.e. checker name)
544533// / should derive from this template and specify all the implemented callbacks
545534// / (i.e. classes like `check::PreStmt` or `eval::Call`) as template arguments
@@ -549,7 +538,7 @@ class Checker : public CheckerBase, public CHECKs... {
549538public:
550539 template <typename CHECKER>
551540 static void _register (CHECKER *Chk, CheckerManager &Mgr) {
552- registerImpl<CHECKER, CHECKs...> (Chk, Mgr);
541+ ( CHECKs::_register (Chk, Mgr), ... );
553542 }
554543};
555544
@@ -564,7 +553,7 @@ class CheckerFamily : public CheckerBackend, public CHECKs... {
564553public:
565554 template <typename CHECKER>
566555 static void _register (CHECKER *Chk, CheckerManager &Mgr) {
567- registerImpl<CHECKER, CHECKs...> (Chk, Mgr);
556+ ( CHECKs::_register (Chk, Mgr), ... );
568557 }
569558};
570559
0 commit comments