re PR c++/65091 (decltype(~arg) fails for template functions)

PR c++/65091
	* parser.c (cp_parser_unqualified_id): Don't accept ~x in a
	template if there is no type x in scope.

From-SVN: r225831
This commit is contained in:
Jason Merrill 2015-07-15 10:13:22 -04:00 committed by Jason Merrill
parent 49f88e4333
commit 0467e3ebef
3 changed files with 26 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2015-07-15 Jason Merrill <jason@redhat.com>
PR c++/65091
* parser.c (cp_parser_unqualified_id): Don't accept ~x in a
template if there is no type x in scope.
2015-07-14 Patrick Palka <ppalka@gcc.gnu.org>
PR c++/66850

View File

@ -5162,8 +5162,15 @@ cp_parser_unqualified_id (cp_parser* parser,
if (processing_template_decl
&& ! cp_parser_parse_definitely (parser))
{
/* We couldn't find a type with this name, so just accept
it and check for a match at instantiation time. */
/* We couldn't find a type with this name. If we're parsing
tentatively, fail and try something else. */
if (cp_parser_uncommitted_to_tentative_parse_p (parser))
{
cp_parser_simulate_error (parser);
return error_mark_node;
}
/* Otherwise, accept it and check for a match at instantiation
time. */
type_decl = cp_parser_identifier (parser);
if (type_decl != error_mark_node)
type_decl = build_nt (BIT_NOT_EXPR, type_decl);

View File

@ -0,0 +1,11 @@
// PR c++/65091
// { dg-do compile { target c++11 } }
template<typename T>
auto foo(T x) -> decltype(~x) {
return ~x;
}
int bar() {
return foo(10);
}