mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-15 04:39:31 +08:00
re PR c++/64603 (bogus error "no matching function for call to ..." with templates)
PR c++/64603 * constexpr.c (cxx_eval_constant_expression): Only shortcut constant CONSTRUCTORs. From-SVN: r219973
This commit is contained in:
parent
d2632e47fc
commit
b85a324239
@ -1,5 +1,9 @@
|
||||
2015-01-21 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/64603
|
||||
* constexpr.c (cxx_eval_constant_expression): Only shortcut
|
||||
constant CONSTRUCTORs.
|
||||
|
||||
PR c++/64647
|
||||
* constexpr.c (ensure_literal_type_for_constexpr_object): Don't
|
||||
give a hard error in a template instantiation.
|
||||
|
@ -2943,9 +2943,6 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
|
||||
*overflow_p = true;
|
||||
return t;
|
||||
}
|
||||
if (TREE_CODE (t) != NOP_EXPR
|
||||
&& reduced_constant_expression_p (t))
|
||||
return fold (t);
|
||||
|
||||
switch (TREE_CODE (t))
|
||||
{
|
||||
@ -3315,6 +3312,10 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
|
||||
break;
|
||||
|
||||
case CONSTRUCTOR:
|
||||
if (TREE_CONSTANT (t))
|
||||
/* Don't re-process a constant CONSTRUCTOR, but do fold it to
|
||||
VECTOR_CST if applicable. */
|
||||
return fold (t);
|
||||
r = cxx_eval_bare_aggregate (ctx, t, lval,
|
||||
non_constant_p, overflow_p);
|
||||
break;
|
||||
|
15
gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof1.C
Normal file
15
gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof1.C
Normal file
@ -0,0 +1,15 @@
|
||||
// PR c++/64603
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template <int i> constexpr int find_longest_name()
|
||||
{
|
||||
return sizeof("Main") - 1;
|
||||
}
|
||||
|
||||
template <int i, int l = find_longest_name<i>()> void create_all_loggers()
|
||||
{}
|
||||
|
||||
int main()
|
||||
{
|
||||
create_all_loggers<1>();
|
||||
}
|
Loading…
Reference in New Issue
Block a user