[cfe-dev] Flag for better diagnosing errors in member templates

Jordan Rose jordan_rose at apple.com
Sat Jun 30 11:36:42 PDT 2012


On Jun 30, 2012, at 8:39 AM, Johannes Schaub wrote:

> I would appreciate a clang flag that leads to better diagnosis in member 
> templates. Consider
> 
>     template<typename T>
>     struct A {
>       template<typename U>
>       void f(U u) {
>         T t;
>         // ...
>       }
>     };
> 
>     struct B;
>     template struct A<B>;
> 
> A<B>::f's definition is ill-formed without a diagnostic being required 
> and Clang does not diagnose it. But Clang aims for catching as many bugs 
> as possible in user programs, and finding this bug appears to be 
> possible with the current clang abilities.
> 
> What do you think?

I'm pretty sure this is NOT an issue until A<B>::f is instantiated. It's possible a specialization of A<B>::f could be introduced that did not declare a B, or that B's definition could be completed before A<B>::f is actually used. That said, I understand your point about "catching as many bugs as possible", so maybe we could add this as an optional warning?

I'm basing this on my intuition of how C++ behaves, though, not on the actual standard.

Jordan



More information about the cfe-dev mailing list