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
|
@ -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>
|
2015-04-20 Ilya Verbin <ilya.verbin@intel.com>
|
||||||
|
|
||||||
* parser.c (cp_parser_omp_target_update): Add missed %> to error_at ().
|
* parser.c (cp_parser_omp_target_update): Add missed %> to error_at ().
|
||||||
|
|
|
@ -9782,7 +9782,7 @@ grokdeclarator (const cp_declarator *declarator,
|
||||||
virtualp = false;
|
virtualp = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!is_auto (type))
|
else if (!is_auto (type) && sfk != sfk_conversion)
|
||||||
{
|
{
|
||||||
error ("%qs function with trailing return type has"
|
error ("%qs function with trailing return type has"
|
||||||
" %qT as its type rather than plain %<auto%>",
|
" %qT as its type rather than plain %<auto%>",
|
||||||
|
@ -9790,7 +9790,8 @@ grokdeclarator (const cp_declarator *declarator,
|
||||||
return error_mark_node;
|
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)
|
if (cxx_dialect < cxx11)
|
||||||
/* Not using maybe_warn_cpp0x because this should
|
/* Not using maybe_warn_cpp0x because this should
|
||||||
|
@ -9899,6 +9900,8 @@ grokdeclarator (const cp_declarator *declarator,
|
||||||
maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
|
maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
|
||||||
explicitp = 2;
|
explicitp = 2;
|
||||||
}
|
}
|
||||||
|
if (late_return_type_p)
|
||||||
|
error ("a conversion function cannot have a trailing return type");
|
||||||
}
|
}
|
||||||
|
|
||||||
arg_types = grokparms (declarator->u.function.parameters,
|
arg_types = grokparms (declarator->u.function.parameters,
|
||||||
|
|
|
@ -21,8 +21,8 @@ struct A
|
||||||
|
|
||||||
struct A2
|
struct A2
|
||||||
{
|
{
|
||||||
operator auto () -> int; // { dg-error "invalid use of" "" { target { ! c++14 } } }
|
operator auto () -> int; // { dg-error "invalid use of|trailing return type" }
|
||||||
operator auto *() -> int; // { dg-error "auto" }
|
operator auto*() -> int; // { dg-error "invalid use of|trailing return type" }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename> struct B
|
template <typename> struct B
|
||||||
|
|
Loading…
Reference in New Issue