re PR c++/54903 (Auto + static in-class constant initialization not working)
PR c++/54903 * decl2.c (mark_used): Don't complain about auto in templates. From-SVN: r193535
This commit is contained in:
parent
f64bcb29f5
commit
c8d15a7262
3 changed files with 31 additions and 10 deletions
|
@ -1,5 +1,8 @@
|
|||
2012-11-14 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/54903
|
||||
* decl2.c (mark_used): Don't complain about auto in templates.
|
||||
|
||||
PR c++/37276
|
||||
* decl.c (decls_match): Remove #ifdef around earlier fix.
|
||||
|
||||
|
|
|
@ -4534,8 +4534,8 @@ mark_used (tree decl)
|
|||
it to find out its type. */
|
||||
if ((decl_maybe_constant_var_p (decl)
|
||||
|| (TREE_CODE (decl) == FUNCTION_DECL
|
||||
&& (DECL_DECLARED_CONSTEXPR_P (decl)
|
||||
|| type_uses_auto (TREE_TYPE (TREE_TYPE (decl))))))
|
||||
&& DECL_DECLARED_CONSTEXPR_P (decl))
|
||||
|| type_uses_auto (TREE_TYPE (decl)))
|
||||
&& DECL_LANG_SPECIFIC (decl)
|
||||
&& DECL_TEMPLATE_INFO (decl)
|
||||
&& !uses_template_parms (DECL_TI_ARGS (decl)))
|
||||
|
@ -4550,6 +4550,14 @@ mark_used (tree decl)
|
|||
--function_depth;
|
||||
}
|
||||
|
||||
if (processing_template_decl)
|
||||
return true;
|
||||
|
||||
/* Check this too in case we're within fold_non_dependent_expr. */
|
||||
if (DECL_TEMPLATE_INFO (decl)
|
||||
&& uses_template_parms (DECL_TI_ARGS (decl)))
|
||||
return true;
|
||||
|
||||
if (type_uses_auto (TREE_TYPE (decl)))
|
||||
{
|
||||
error ("use of %qD before deduction of %<auto%>", decl);
|
||||
|
@ -4560,14 +4568,6 @@ mark_used (tree decl)
|
|||
if (cp_unevaluated_operand != 0)
|
||||
return true;
|
||||
|
||||
if (processing_template_decl)
|
||||
return true;
|
||||
|
||||
/* Check this too in case we're within fold_non_dependent_expr. */
|
||||
if (DECL_TEMPLATE_INFO (decl)
|
||||
&& uses_template_parms (DECL_TI_ARGS (decl)))
|
||||
return true;
|
||||
|
||||
DECL_ODR_USED (decl) = 1;
|
||||
if (DECL_CLONED_FUNCTION_P (decl))
|
||||
DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
|
||||
|
|
18
gcc/testsuite/g++.dg/cpp0x/auto36.C
Normal file
18
gcc/testsuite/g++.dg/cpp0x/auto36.C
Normal file
|
@ -0,0 +1,18 @@
|
|||
// PR c++/54903
|
||||
// { dg-options -std=c++11 }
|
||||
|
||||
template<int N, int D>
|
||||
struct Modulus
|
||||
{
|
||||
static auto const value = N % D;
|
||||
};
|
||||
|
||||
template<int N>
|
||||
struct Angle
|
||||
{
|
||||
static auto const value = Modulus<N, 360>::value; // ERROR
|
||||
//static int const value = Modulus<N, 360>::value; // OK
|
||||
//static auto const value = N % 360; // OK
|
||||
|
||||
typedef Angle<value> type;
|
||||
};
|
Loading…
Add table
Reference in a new issue