http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52809
Bug #: 52809 Summary: Template non-dependent static_assert diagnostics may confuse Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: pot...@mac.com A static_assert declaration that does not depend on template parameters will be detected and reported while parsing the template, before any instantiation. This is OK because such a template would have no valid instantiation, which immediately renders the program ill-formed. In terms of cosmetic QOI, however, it would be better to clarify the messages for users who don't know all the rules. Intuitively, the assertion shouldn't be evaluated until instantiation, regardless of dependence. The user might expect an uninstantiated template to pass through. We should add something like "error: template MyTemplate cannot have a valid instantiation" after the static_assert diagnostic. Example code and result, as currently implemented: template< bool b > struct s { static_assert( b, "uhoh" ); static_assert( false, "yikes" ); }; s< false > q; depassert.cpp:4:1: error: static assertion failed: yikes depassert.cpp: In instantiation of ‘struct s<false>’: depassert.cpp:7:12: required from here depassert.cpp:3:1: error: static assertion failed: uhoh