public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/7412] [DR 106] References to references
       [not found] <bug-7412-184@http.gcc.gnu.org/bugzilla/>
@ 2006-10-19 14:52 ` pinskia at gcc dot gnu dot org
  2007-05-30 19:59 ` dgregor at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-10-19 14:52 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from pinskia at gcc dot gnu dot org  2006-10-19 14:52 -------
*** Bug 29515 has been marked as a duplicate of this bug. ***


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pluto at agmk dot net


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7412


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/7412] [DR 106] References to references
       [not found] <bug-7412-184@http.gcc.gnu.org/bugzilla/>
  2006-10-19 14:52 ` [Bug c++/7412] [DR 106] References to references pinskia at gcc dot gnu dot org
@ 2007-05-30 19:59 ` dgregor at gcc dot gnu dot org
  2007-05-31  1:18 ` dgregor at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: dgregor at gcc dot gnu dot org @ 2007-05-30 19:59 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from dgregor at gcc dot gnu dot org  2007-05-30 19:59 -------
The rvalue references patch (PR 29939) also implements reference collapsing as
described in core issue 106.

Unfortunately, however, Wolfgang's test case does not work even with reference
collapsing due to an interaction with library issue 109
(http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#109), which means
that instantiating a binder with a reference type results in errors like the
following:

/Volumes/scratch/dgregor/gcc0x-install/lib/gcc/powerpc-apple-darwin8.9.0/4.3.0/../../../../include/c++/4.3.0/bits/stl_function.h:
In instantiation of 'std::binder2nd<std::pointer_to_binary_function<const int&,
const int&, void> >':
honk.cpp:4:   instantiated from here
/Volumes/scratch/dgregor/gcc0x-install/lib/gcc/powerpc-apple-darwin8.9.0/4.3.0/../../../../include/c++/4.3.0/bits/stl_function.h:445:
error: 'typename _Operation::result_type
std::binder2nd<_Operation>::operator()(typename
_Operation::first_argument_type&) const [with _Operation =
std::pointer_to_binary_function<const int&, const int&, void>]' cannot be
overloaded
/Volumes/scratch/dgregor/gcc0x-install/lib/gcc/powerpc-apple-darwin8.9.0/4.3.0/../../../../include/c++/4.3.0/bits/stl_function.h:439:
error: with 'typename _Operation::result_type
std::binder2nd<_Operation>::operator()(const typename
_Operation::first_argument_type&) const [with _Operation =
std::pointer_to_binary_function<const int&, const int&, void>]'

With some work on the library side, we should be able to fix this problem. But,
I consider that a separate issue.


-- 

dgregor at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dgregor at gcc dot gnu dot
                   |                            |org
   Last reconfirmed|2006-03-05 03:54:05         |2007-05-30 19:59:36
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7412


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/7412] [DR 106] References to references
       [not found] <bug-7412-184@http.gcc.gnu.org/bugzilla/>
  2006-10-19 14:52 ` [Bug c++/7412] [DR 106] References to references pinskia at gcc dot gnu dot org
  2007-05-30 19:59 ` dgregor at gcc dot gnu dot org
@ 2007-05-31  1:18 ` dgregor at gcc dot gnu dot org
  2007-05-31  1:27 ` dgregor at gcc dot gnu dot org
  2007-05-31  1:33 ` fang at csl dot cornell dot edu
  4 siblings, 0 replies; 5+ messages in thread
From: dgregor at gcc dot gnu dot org @ 2007-05-31  1:18 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from dgregor at gcc dot gnu dot org  2007-05-31 01:18 -------
Subject: Bug 7412

Author: dgregor
Date: Thu May 31 01:18:22 2007
New Revision: 125211

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=125211
Log:
2007-05-30  Russell Yanofsky <russ@yanofsky.org>
            Douglas Gregor <doug.gregor@gmail.com>
            Pedro Lamarao <pedro.lamarao@mndfck.org>
            Howard Hinnant <howard.hinnant@gmail.com>

        PR c++/7412
        PR c++/29939
        * g++.dg/cpp0x/rv8p.C: New.
        * g++.dg/cpp0x/temp-constructor-bug.C: New.
        * g++.dg/cpp0x/cast-bug.C: New.
        * g++.dg/cpp0x/elision_weak.C: New.
        * g++.dg/cpp0x/collapse-bug.C: New.
        * g++.dg/cpp0x/rv3p.C: New.
        * g++.dg/cpp0x/rv7n.C: New.
        * g++.dg/cpp0x/overload-conv-1.C: New.
        * g++.dg/cpp0x/rv2n.C: New.
        * g++.dg/cpp0x/deduce.C: New.
        * g++.dg/cpp0x/temp-va-arg-bug.C: New.
        * g++.dg/cpp0x/rv6p.C: New.
        * g++.dg/cpp0x/template_deduction.C: New.
        * g++.dg/cpp0x/implicit-copy.C: New.
        * g++.dg/cpp0x/rv1p.C: New.
        * g++.dg/cpp0x/cast.C: New.
        * g++.dg/cpp0x/rv5n.C: New.
        * g++.dg/cpp0x/collapse.C: New.
        * g++.dg/cpp0x/overload-conv-2.C: New.
        * g++.dg/cpp0x/rv4p.C: New.
        * g++.dg/cpp0x/rvo.C: New.
        * g++.dg/cpp0x/iop.C: New.
        * g++.dg/cpp0x/rv3n.C: New.
        * g++.dg/cpp0x/rv7p.C: New.
        * g++.dg/cpp0x/reference_collapsing.C: New.
        * g++.dg/cpp0x/overload.C: New.
        * g++.dg/cpp0x/named.C: New.
        * g++.dg/cpp0x/rv2p.C: New.
        * g++.dg/cpp0x/rv6n.C: New.
        * g++.dg/cpp0x/not_special.C: New.
        * g++.dg/cpp0x/bind.C: New.
        * g++.dg/cpp0x/rv1n.C: New.
        * g++.dg/cpp0x/rv5p.C: New.
        * g++.dg/cpp0x/elision.C: New.
        * g++.dg/cpp0x/named_refs.C: New.
        * g++.dg/cpp0x/unnamed_refs.C: New.
        * g++.dg/cpp0x/rv4n.C: New.
        * g++.dg/cpp0x/elision_neg.C: New.
        * g++.dg/init/copy7.C: Run in C++98 mode.
        * g++.dg/overload/arg1.C: Ditto.
        * g++.dg/overload/arg4.C: Ditto.

2007-05-30  Russell Yanofsky <russ@yanofsky.org>
            Douglas Gregor <doug.gregor@gmail.com>
            Pedro Lamarao <pedro.lamarao@mndfck.org>
            Howard Hinnant <howard.hinnant@gmail.com>

        PR c++/7412
        PR c++/29939
        * typeck.c (comptypes): Don't consider rvalue and lvalue
        reference types to be equivalent.
        (check_return_expr): Move from certain lvalues when returning
        them.
        * decl.c (grokdeclarator): Implement reference collapsing.
        (copy_fn_p): Don't consider constructors taking rvalue references
        to be copy constructors.
        (move_fn_p): New.
        * call.c (conversion): New "rvaluedness_matches_p" member.
        (convert_class_to_reference): Require reference type as first
        parameter instead of base type.
        (reference_binding): Add logic to handle rvalue references.
        (implicit_conversion): Update inaccurate comment.
        (convert_like_real): Disable creation of temporaries that are
        impossible to initialize for types with move constructors.
        (build_over_call): Elide move constructors when possible.
        (maybe_handle_implicit_object): Set "rvaluedness_matches_p".
        (maybe_handle_ref_bind): Return conversion instead of type node.
        (compare_ics): Add logic to use "rvaluedness_matches_p" values to
        determine preferred conversion sequences.
        * cp-tree.h (TYPE_REF_IS_RVALUE): New.
        (LOOKUP_PREFER_RVALUE): New.
        (DECL_MOVE_CONSTRUCTOR_P): New.
        (struct cp_declarator): Add "reference" member for reference
        types, with new "rvalue_ref" flag.
        (cp_build_reference_type): Declare.
        (move_fn_p): Declare.
        * error.c (dump_type_prefix): Format rvalue reference types
        correctly in error messages.
        * except.c (build_throw): Move from certain lvalues when
        throwing.
        * mangle.c (write_type): Mangle rvalue references differently
        than regular references.
        * parser.c (make_reference_declarator): Add boolean parameter for
        rvalue references.
        (cp_parser_make_indirect_declarator): New.
        (cp_parser_new_declarator_opt): Call
        cp_parser_make_indirect_declarator. 
        (cp_parser_conversion_declarator_opt): Ditto.
        (cp_parser_declarator): Ditto.
        (cp_parser_ptr_operator): Parse "&&" tokens into rvalue reference
        declarators.
        * pt.c (tsubst): Implement reference collapsing.
        (maybe_adjust_types_for_deduction): Implement special template
        parameter deduction rule for rvalue references.
        (type_unification_real): Update calls to
        maybe_adjust_types_for_deduction.
        (try_one_overload): Ditto.
        (unify_pack_expansion): Ditto.
        * tree.c (lvalue_p_1): Handle rvalue reference types.
        (cp_build_reference_type): New.

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/bind.C
    trunk/gcc/testsuite/g++.dg/cpp0x/cast-bug.C
    trunk/gcc/testsuite/g++.dg/cpp0x/cast.C
    trunk/gcc/testsuite/g++.dg/cpp0x/collapse-bug.C
    trunk/gcc/testsuite/g++.dg/cpp0x/collapse.C
    trunk/gcc/testsuite/g++.dg/cpp0x/deduce.C
    trunk/gcc/testsuite/g++.dg/cpp0x/elision.C
    trunk/gcc/testsuite/g++.dg/cpp0x/elision_neg.C
    trunk/gcc/testsuite/g++.dg/cpp0x/elision_weak.C
    trunk/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
    trunk/gcc/testsuite/g++.dg/cpp0x/iop.C
    trunk/gcc/testsuite/g++.dg/cpp0x/named.C
    trunk/gcc/testsuite/g++.dg/cpp0x/named_refs.C
    trunk/gcc/testsuite/g++.dg/cpp0x/not_special.C
    trunk/gcc/testsuite/g++.dg/cpp0x/overload-conv-1.C
    trunk/gcc/testsuite/g++.dg/cpp0x/overload-conv-2.C
    trunk/gcc/testsuite/g++.dg/cpp0x/overload.C
    trunk/gcc/testsuite/g++.dg/cpp0x/reference_collapsing.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv1n.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv1p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv2n.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv2p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv3n.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv3p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv4n.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv4p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv5n.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv5p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv6n.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv6p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv7n.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv7p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rv8p.C
    trunk/gcc/testsuite/g++.dg/cpp0x/rvo.C
    trunk/gcc/testsuite/g++.dg/cpp0x/temp-constructor-bug.C
    trunk/gcc/testsuite/g++.dg/cpp0x/temp-va-arg-bug.C
    trunk/gcc/testsuite/g++.dg/cpp0x/template_deduction.C
    trunk/gcc/testsuite/g++.dg/cpp0x/unnamed_refs.C
Modified:
    trunk/ChangeLog
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/call.c
    trunk/gcc/cp/cp-tree.h
    trunk/gcc/cp/decl.c
    trunk/gcc/cp/error.c
    trunk/gcc/cp/except.c
    trunk/gcc/cp/mangle.c
    trunk/gcc/cp/parser.c
    trunk/gcc/cp/pt.c
    trunk/gcc/cp/tree.c
    trunk/gcc/cp/typeck.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/g++.dg/init/copy7.C
    trunk/gcc/testsuite/g++.dg/overload/arg1.C
    trunk/gcc/testsuite/g++.dg/overload/arg4.C


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7412


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/7412] [DR 106] References to references
       [not found] <bug-7412-184@http.gcc.gnu.org/bugzilla/>
                   ` (2 preceding siblings ...)
  2007-05-31  1:18 ` dgregor at gcc dot gnu dot org
@ 2007-05-31  1:27 ` dgregor at gcc dot gnu dot org
  2007-05-31  1:33 ` fang at csl dot cornell dot edu
  4 siblings, 0 replies; 5+ messages in thread
From: dgregor at gcc dot gnu dot org @ 2007-05-31  1:27 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #7 from dgregor at gcc dot gnu dot org  2007-05-31 01:27 -------
Fixed on mainline for GCC 4.3.0. DR 106 is implemented for C++0x mode and for
non-strict C++98 mode.


-- 

dgregor at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|---                         |4.3.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7412


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/7412] [DR 106] References to references
       [not found] <bug-7412-184@http.gcc.gnu.org/bugzilla/>
                   ` (3 preceding siblings ...)
  2007-05-31  1:27 ` dgregor at gcc dot gnu dot org
@ 2007-05-31  1:33 ` fang at csl dot cornell dot edu
  4 siblings, 0 replies; 5+ messages in thread
From: fang at csl dot cornell dot edu @ 2007-05-31  1:33 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #8 from fang at csl dot cornell dot edu  2007-05-31 01:33 -------
... and there was much rejoicing.
(Thanks, Doug, et al.!)


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7412


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-05-31  1:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-7412-184@http.gcc.gnu.org/bugzilla/>
2006-10-19 14:52 ` [Bug c++/7412] [DR 106] References to references pinskia at gcc dot gnu dot org
2007-05-30 19:59 ` dgregor at gcc dot gnu dot org
2007-05-31  1:18 ` dgregor at gcc dot gnu dot org
2007-05-31  1:27 ` dgregor at gcc dot gnu dot org
2007-05-31  1:33 ` fang at csl dot cornell dot edu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).