[PATCH] templated static_assert

Richard Smith richard at metafoo.co.uk
Mon Aug 4 11:48:49 PDT 2014


I don't think the diagnostic wording is right: 'template<typename T>' is
not "a template declaration" in itself. A better model for the diagnostic
might be this:

<stdin>:1:34: error: a typedef cannot be a template
template<typename T> typedef int n;
                                 ^

... so "a static_assert declaration cannot be a template" (or "[...] cannot
be templated" or similar).

Also, we should use the same diagnostic for the member-declaration and the
non-member-declaration cases. (Right now, the non-member case gives a
useless "C++ requires a type specifier" diagnostic.)


On Mon, Aug 4, 2014 at 11:23 AM, Aaron Ballman <aaron at aaronballman.com>
wrote:

> According to [temp]p1, a static_assert cannot be templated (we have a
> FIXME in the code about this as well). This patch emits a diagnostic
> turning this into an error instead of silently accepting the template
> and doing the wrong thing. Eg)
>
> struct S {
>   template <typename Ty = char>
>   static_assert(sizeof(Ty) != 1, "Not a char");
> };
>
> This code currently compiles without diagnosing, but the static_assert
> does not result in a diagnostic as you would expect. With this patch,
> the code now emits a diagnostic on the template declaration.
>
> ~Aaron
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140804/30c8f394/attachment.html>


More information about the cfe-commits mailing list