http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53464
Bug #: 53464 Summary: Invalid default value for non-type template parameter is accepted Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: sch...@uni-mainz.de Consider the following code: template <int value> struct bar { static constexpr int get() { return value; } }; template <typename A, int value = A::get()> struct foo { }; int main() { typedef foo<bar<0>> type; return 0; } It should be rejected, since A::get() is not a "converted constant expression" as discussed in http://stackoverflow.com/questions/10721130 . I tested this with the GCC from svn.