GCC4.6.0(with C++0x mode) reject static const member variable depending template parameter type. ---- testcase.C ---- template < typename T, T N > struct S { static const T value = N; typedef S< T, value + 1 > next; }; -------------------- It seems caused by r170488 (git: cfa61f8435164f3205d70c7e1c5038b2d881aa1d). In other case, GCC accepts codes. For example: ---- testcase.C (accepted) ---- template < int N > struct S { static const int value = N; typedef S< value + 1 > next; }; ------------------------------- Another case: ---- testcase.C (accepted) ---- template < typename T, T N > struct S { static constexpr T value = N; typedef S< T, value + 1 > next; }; -------------------------------
Urgh, I can confirm this. Jason, can you have a look?
Oops.
Author: jason Date: Sun Feb 27 08:13:16 2011 New Revision: 170532 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=170532 Log: PR c++/47897 * semantics.c (non_const_var_error): Split out from... (cxx_eval_constant_expression): ...here. (potential_constant_expression_1) [VAR_DECL]: Use it. Allow dependent variables. Added: trunk/gcc/testsuite/g++.dg/cpp0x/regress/template-const1.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/semantics.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/g++.dg/cpp0x/regress/debug-debug7.C trunk/gcc/testsuite/g++.dg/cpp0x/regress/template-function1.C trunk/gcc/testsuite/g++.dg/debug/debug7.C trunk/gcc/testsuite/g++.dg/template/function1.C
Fixed.