[PATCH] D13787: [clang-tidy] add check cppcoreguidelines-pro-type-vararg-use

Samuel Benzaquen via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 19 09:54:29 PDT 2015


sbenza added inline comments.

================
Comment at: clang-tidy/cppcoreguidelines/ProTypeVarargUseCheck.cpp:20
@@ +19,3 @@
+void ProTypeVarargUseCheck::registerMatchers(MatchFinder *Finder) {
+  Finder->addMatcher(callExpr(callee(functionDecl(isVariadic()))).bind("expr"), this);
+}
----------------
mgehre wrote:
> sbenza wrote:
> > The guideline says that we should also issue a diagnostics for uses of va_list/va_start/va_arg.
> This is handled by http://reviews.llvm.org/D13785
I see. They are split between vararg "def" and "use".

================
Comment at: test/clang-tidy/cppcoreguidelines-pro-type-vararg-use.cpp:14
@@ +13,3 @@
+
+void check() {
+  f_vararg(1, 7, 9);
----------------
mgehre wrote:
> sbenza wrote:
> > how does this handle SFINAE style ... uses?
> > The guideline mentions this case as "useful" so we should try to avoid warning on it.
> I saw the note in the guidelines, but frankly I don't quite get the use case.
> Do you have an example or reference for me?
... has the lowest rank for overload resolution.
You can use it as a default case.
Example:

    template <typename T>
    void CallFooIfAvailableImpl(T& t, decltype(t.foo())*) {
      t->foo();
    }
    template <typename T>
    void CallFooIfAvailableImpl(T& t, ...) {
      // nothing
    }
    template <typename T>
    void CallFooIfAvailable(T& t) {
      CallFooIfAvailableImpl(t, 0);
    }

It is also useful when making traits.
Eg: https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Member_Detector#Solution_and_Sample_Code


http://reviews.llvm.org/D13787





More information about the cfe-commits mailing list