Reject trailing return type for an operator auto().
* decl.c (grokdeclarator): Reject trailing return types for all conversion operators, don't handle conversion operators in the previous checks that deal with auto. From-SVN: r222248
This commit is contained in:
parent
cb864fbc7e
commit
0cfabb3780
3 changed files with 14 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-04-20 Ville Voutilainen <ville.voutilainen@gmail.com>
|
||||
|
||||
Reject trailing return type for an operator auto().
|
||||
* decl.c (grokdeclarator): Reject trailing return types for
|
||||
all conversion operators, don't handle conversion operators
|
||||
in the previous checks that deal with auto.
|
||||
|
||||
2015-04-20 Ilya Verbin <ilya.verbin@intel.com>
|
||||
|
||||
* parser.c (cp_parser_omp_target_update): Add missed %> to error_at ().
|
||||
|
|
|
@ -9782,7 +9782,7 @@ grokdeclarator (const cp_declarator *declarator,
|
|||
virtualp = false;
|
||||
}
|
||||
}
|
||||
else if (!is_auto (type))
|
||||
else if (!is_auto (type) && sfk != sfk_conversion)
|
||||
{
|
||||
error ("%qs function with trailing return type has"
|
||||
" %qT as its type rather than plain %<auto%>",
|
||||
|
@ -9790,7 +9790,8 @@ grokdeclarator (const cp_declarator *declarator,
|
|||
return error_mark_node;
|
||||
}
|
||||
}
|
||||
else if (declarator->u.function.late_return_type)
|
||||
else if (declarator->u.function.late_return_type
|
||||
&& sfk != sfk_conversion)
|
||||
{
|
||||
if (cxx_dialect < cxx11)
|
||||
/* Not using maybe_warn_cpp0x because this should
|
||||
|
@ -9899,6 +9900,8 @@ grokdeclarator (const cp_declarator *declarator,
|
|||
maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
|
||||
explicitp = 2;
|
||||
}
|
||||
if (late_return_type_p)
|
||||
error ("a conversion function cannot have a trailing return type");
|
||||
}
|
||||
|
||||
arg_types = grokparms (declarator->u.function.parameters,
|
||||
|
|
|
@ -21,8 +21,8 @@ struct A
|
|||
|
||||
struct A2
|
||||
{
|
||||
operator auto () -> int; // { dg-error "invalid use of" "" { target { ! c++14 } } }
|
||||
operator auto *() -> int; // { dg-error "auto" }
|
||||
operator auto () -> int; // { dg-error "invalid use of|trailing return type" }
|
||||
operator auto*() -> int; // { dg-error "invalid use of|trailing return type" }
|
||||
};
|
||||
|
||||
template <typename> struct B
|
||||
|
|
Loading…
Add table
Reference in a new issue