PR c++/83714 - ICE checking return in template.
* typeck.c (check_return_expr): Call build_non_dependent_expr. From-SVN: r256765
This commit is contained in:
parent
a9db08a673
commit
035181c312
@ -1,3 +1,8 @@
|
||||
2018-01-16 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/83714 - ICE checking return in template.
|
||||
* typeck.c (check_return_expr): Call build_non_dependent_expr.
|
||||
|
||||
2018-01-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/83817
|
||||
|
@ -9333,6 +9333,9 @@ check_return_expr (tree retval, bool *no_warning)
|
||||
to undo it so we can try to treat it as an rvalue below. */
|
||||
retval = maybe_undo_parenthesized_ref (retval);
|
||||
|
||||
if (processing_template_decl)
|
||||
retval = build_non_dependent_expr (retval);
|
||||
|
||||
/* Under C++11 [12.8/32 class.copy], a returned lvalue is sometimes
|
||||
treated as an rvalue for the purposes of overload resolution to
|
||||
favor move constructors over copy constructors.
|
||||
|
16
gcc/testsuite/g++.dg/cpp0x/alias-decl-61.C
Normal file
16
gcc/testsuite/g++.dg/cpp0x/alias-decl-61.C
Normal file
@ -0,0 +1,16 @@
|
||||
// PR c++/83714
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
class a {
|
||||
typedef int b;
|
||||
operator b();
|
||||
};
|
||||
struct c {
|
||||
using d = a;
|
||||
};
|
||||
using e = c;
|
||||
|
||||
template <class T>
|
||||
e f(T) {
|
||||
return e::d {}; // { dg-error "could not convert" }
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user