[cfe-commits] r165769 - /cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h

Abramo Bagnara abramo.bagnara at bugseng.com
Fri Oct 12 00:31:33 PDT 2012


Il 12/10/2012 04:31, Sean Silva ha scritto:
>> Stupid attempt:
>>
>> struct A { void f(); };
>> struct B : A {
>> #ifdef B_HAS_F
>>   void f();
>> #endif
>> };
>> decltype(&B::f) x;
>> extern void (B::*x)(); // error unless B_HAS_F
>>
>> Unfortunately, not a complete solution, because you don't know the
>> precise signature of the classof you're looking for.
> 
> Thanks! (there's a typedef needed before the decltype, right?)
> 
> Could this be made workable if we know that the classof() has the signature
>     static bool classof(const T *);
> where T is strictly is_base_of the enclosing class?

The trick does not work for static methods. Can you use non-static ones?

> Also, is it possible to do without the decltype?

You can use

template <typename T, T x>
struct has_type;

to check if B::f is indeed a void (B::*)()

-- 
Abramo Bagnara

BUGSENG srl - http://bugseng.com
mailto:abramo.bagnara at bugseng.com



More information about the cfe-commits mailing list