diff options
author | Jason Merrill <jason@redhat.com> | 2011-06-18 01:58:38 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-06-18 01:58:38 -0400 |
commit | dfe8601ce70a97d09e08e14e0ebd0f2ef4608d0f (patch) | |
tree | 3c2658abd9ee5cf202bdc4c776110840cc86698c | |
parent | 65e5579c296a74e7c317d8569406e725d8df8bff (diff) | |
download | gcc-dfe8601ce70a97d09e08e14e0ebd0f2ef4608d0f.zip gcc-dfe8601ce70a97d09e08e14e0ebd0f2ef4608d0f.tar.gz gcc-dfe8601ce70a97d09e08e14e0ebd0f2ef4608d0f.tar.bz2 |
re PR c++/49458 ([C++0x][DR 1328] Obvious candidate for conversion to function lvalue rejected)
PR c++/49458
* call.c (convert_class_to_reference_1): Allow binding function
lvalue to rvalue reference.
From-SVN: r175164
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/call.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/rv-func2.C | 10 |
4 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f3fca84..3217c8f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-06-17 Jason Merrill <jason@redhat.com> + PR c++/49458 + * call.c (convert_class_to_reference_1): Allow binding function + lvalue to rvalue reference. + PR c++/43912 Generate proxy VAR_DECLs for better lambda debug info. * cp-tree.h (FUNCTION_NEEDS_BODY_BLOCK): Add lambda operator(). diff --git a/gcc/cp/call.c b/gcc/cp/call.c index b43d078..05bf983 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -1362,6 +1362,8 @@ convert_class_to_reference_1 (tree reference_type, tree s, tree expr, int flags) /* Don't allow binding of lvalues to rvalue references. */ if (TYPE_REF_IS_RVALUE (reference_type) + /* Function lvalues are OK, though. */ + && TREE_CODE (TREE_TYPE (reference_type)) != FUNCTION_TYPE && !TYPE_REF_IS_RVALUE (TREE_TYPE (TREE_TYPE (cand->fn)))) cand->second_conv->bad_p = true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 805c5b1..d782641 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-06-17 Jason Merrill <jason@redhat.com> + * g++.dg/cpp0x/rv-func2.C: New. + * g++.dg/debug/dwarf2/lambda1.C: New. * g++.dg/warn/Wshadow-6.C: Adjust. diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-func2.C b/gcc/testsuite/g++.dg/cpp0x/rv-func2.C new file mode 100644 index 0000000..b792342 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/rv-func2.C @@ -0,0 +1,10 @@ +// PR c++/49458 +// { dg-options -std=c++0x } + +typedef void ftype(); + +struct A { + operator ftype&(void); +}; + +ftype &&frvref = A(); |