re PR c++/63362 (The c++11 triviality-traits need front-end help)
PR c++/63362 * method.c (constructible_expr): Handle value-init of non-class. * parser.c (cp_parser_trait_expr): Allow pack expansion. * pt.c (tsubst_copy_and_build): Handle pack expansion. From-SVN: r215772
This commit is contained in:
parent
a710f1f83c
commit
662bb4b85e
5 changed files with 24 additions and 2 deletions
|
@ -1,5 +1,10 @@
|
|||
2014-10-01 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/63362
|
||||
* method.c (constructible_expr): Handle value-init of non-class.
|
||||
* parser.c (cp_parser_trait_expr): Allow pack expansion.
|
||||
* pt.c (tsubst_copy_and_build): Handle pack expansion.
|
||||
|
||||
PR c++/63362
|
||||
* class.c (type_has_non_user_provided_default_constructor): Rename
|
||||
from type_has_user_provided_default_constructor, reverse sense.
|
||||
|
|
|
@ -1077,7 +1077,9 @@ constructible_expr (tree to, tree from)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (TREE_CHAIN (from))
|
||||
if (from == NULL_TREE)
|
||||
return build_value_init (to, tf_none);
|
||||
else if (TREE_CHAIN (from))
|
||||
return error_mark_node; // too many initializers
|
||||
from = build_stub_object (TREE_VALUE (from));
|
||||
expr = perform_direct_initialization_if_possible (to, from,
|
||||
|
|
|
@ -8780,6 +8780,11 @@ cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
|
|||
{
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
tree elt = cp_parser_type_id (parser);
|
||||
if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
|
||||
{
|
||||
cp_lexer_consume_token (parser->lexer);
|
||||
elt = make_pack_expansion (elt);
|
||||
}
|
||||
if (elt == error_mark_node)
|
||||
return error_mark_node;
|
||||
type2 = tree_cons (NULL_TREE, elt, type2);
|
||||
|
|
|
@ -15487,7 +15487,9 @@ tsubst_copy_and_build (tree t,
|
|||
complain, in_decl);
|
||||
|
||||
tree type2 = TRAIT_EXPR_TYPE2 (t);
|
||||
if (type2)
|
||||
if (type2 && TREE_CODE (type2) == TREE_LIST)
|
||||
type2 = RECUR (type2);
|
||||
else if (type2)
|
||||
type2 = tsubst (type2, args, complain, in_decl);
|
||||
|
||||
RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
|
||||
|
|
8
gcc/testsuite/g++.dg/ext/is_trivially_constructible3.C
Normal file
8
gcc/testsuite/g++.dg/ext/is_trivially_constructible3.C
Normal file
|
@ -0,0 +1,8 @@
|
|||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template <class T, class... Args> void bar() {
|
||||
static_assert(__is_trivially_constructible(T, Args...), "");
|
||||
}
|
||||
|
||||
template void bar<int>();
|
||||
template void bar<int,int>();
|
Loading…
Add table
Reference in a new issue