diff options
author | Jason Merrill <jason@redhat.com> | 2003-03-28 19:49:34 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2003-03-28 19:49:34 -0500 |
commit | f7b9026e22187c0467cfbb7822790ed81ec8b46c (patch) | |
tree | 1304860ebc6fe0830fc1d69b036fc4fc938d368d /gcc/cp/cvt.c | |
parent | f7b4bc4d8fa2bd6786771f6189261cad73957220 (diff) | |
download | gcc-f7b9026e22187c0467cfbb7822790ed81ec8b46c.zip gcc-f7b9026e22187c0467cfbb7822790ed81ec8b46c.tar.gz gcc-f7b9026e22187c0467cfbb7822790ed81ec8b46c.tar.bz2 |
re PR c++/10245 (?: operator requires public copy constructor of return type)
PR c++/10245
* cvt.c (force_rvalue): New fn.
* call.c (build_conditional_expr): Use it.
* cp-tree.h: Declare it.
From-SVN: r65005
Diffstat (limited to 'gcc/cp/cvt.c')
-rw-r--r-- | gcc/cp/cvt.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 88e802e..19bca82 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -573,6 +573,21 @@ convert_lvalue (tree totype, tree expr) NULL_TREE); return convert_from_reference (expr); } + +/* Really perform an lvalue-to-rvalue conversion, including copying an + argument of class type into a temporary. */ + +tree +force_rvalue (tree expr) +{ + if (IS_AGGR_TYPE (TREE_TYPE (expr)) && TREE_CODE (expr) != TARGET_EXPR) + expr = ocp_convert (TREE_TYPE (expr), expr, + CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL); + else + expr = decay_conversion (expr); + + return expr; +} /* C++ conversions, preference to static cast conversions. */ |