public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/51066] New: [C++0x] warning about binding an rvalue-reference to an implicit conversion result
@ 2011-11-09 18:14 redi at gcc dot gnu.org
  2012-01-19 20:16 ` [Bug c++/51066] " redi at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2011-11-09 18:14 UTC (permalink / raw)
  To: gcc-bugs

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

             Bug #: 51066
           Summary: [C++0x] warning about binding an rvalue-reference to
                    an implicit conversion result
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: enhancement
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: redi@gcc.gnu.org


Inspired by the thread beginning with c++std-core-20672, G++ should warn about
this code:

struct A { };
struct B { B(A) {} };

A a;
B&& b = a;

warning: 'b' will bind to a temporary of type 'B' created by implicit
conversion from 'a'


This should only give a warning for a local variable of rvalue reference type
that is initialized by a non-reference-related object so that an implicit
conversion occurs.

There should be no warning when the conversion initializes a function parameter
e.g.

void f(B&&);
A a;
f(a);  // ok


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

* [Bug c++/51066] [C++0x] warning about binding an rvalue-reference to an implicit conversion result
  2011-11-09 18:14 [Bug c++/51066] New: [C++0x] warning about binding an rvalue-reference to an implicit conversion result redi at gcc dot gnu.org
@ 2012-01-19 20:16 ` redi at gcc dot gnu.org
  2021-03-23 11:28 ` redi at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2012-01-19 20:16 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-01-19 19:42:33 UTC ---
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1414 is related


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

* [Bug c++/51066] [C++0x] warning about binding an rvalue-reference to an implicit conversion result
  2011-11-09 18:14 [Bug c++/51066] New: [C++0x] warning about binding an rvalue-reference to an implicit conversion result redi at gcc dot gnu.org
  2012-01-19 20:16 ` [Bug c++/51066] " redi at gcc dot gnu.org
@ 2021-03-23 11:28 ` redi at gcc dot gnu.org
  2021-03-23 11:51 ` redi at gcc dot gnu.org
  2023-07-02  0:05 ` egallager at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-23 11:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51066

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This warning would also help with this horror:
https://twitter.com/zygoloid/status/1367301323838812160

#include <stdio.h>
void f(float&&) { puts("float"); }
void f(int&&) { puts("int"); }
template<typename T> void g(T x) { f(x); }
int main() {
  g(1.0f);
  g(2);
}

Prints "int\nfloat\n" because f(x) cannot bind directly to an rvalue reference
so there is an implicit conversion.

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

* [Bug c++/51066] [C++0x] warning about binding an rvalue-reference to an implicit conversion result
  2011-11-09 18:14 [Bug c++/51066] New: [C++0x] warning about binding an rvalue-reference to an implicit conversion result redi at gcc dot gnu.org
  2012-01-19 20:16 ` [Bug c++/51066] " redi at gcc dot gnu.org
  2021-03-23 11:28 ` redi at gcc dot gnu.org
@ 2021-03-23 11:51 ` redi at gcc dot gnu.org
  2023-07-02  0:05 ` egallager at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-23 11:51 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51066

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
And this one https://twitter.com/wakomeup/status/1274778577087627267

struct B { };
struct D : B { };
B b;
D&& d(b);              // binds to implicit conversion result
D&& dd(std::move(b));  // binds to implicit conversion result

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

* [Bug c++/51066] [C++0x] warning about binding an rvalue-reference to an implicit conversion result
  2011-11-09 18:14 [Bug c++/51066] New: [C++0x] warning about binding an rvalue-reference to an implicit conversion result redi at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2021-03-23 11:51 ` redi at gcc dot gnu.org
@ 2023-07-02  0:05 ` egallager at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: egallager at gcc dot gnu.org @ 2023-07-02  0:05 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51066

--- Comment #5 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #3)
> This warning would also help with this horror:
> https://twitter.com/zygoloid/status/1367301323838812160

(In reply to Jonathan Wakely from comment #4)
> And this one https://twitter.com/wakomeup/status/1274778577087627267

Archive links for these: 

http://web.archive.org/web/20220327011407/https://twitter.com/zygoloid/status/1367301323838812160
http://web.archive.org/web/20200621190630/https://twitter.com/wakomeup/status/1274778577087627267

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

end of thread, other threads:[~2023-07-02  0:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-09 18:14 [Bug c++/51066] New: [C++0x] warning about binding an rvalue-reference to an implicit conversion result redi at gcc dot gnu.org
2012-01-19 20:16 ` [Bug c++/51066] " redi at gcc dot gnu.org
2021-03-23 11:28 ` redi at gcc dot gnu.org
2021-03-23 11:51 ` redi at gcc dot gnu.org
2023-07-02  0:05 ` egallager at gcc dot gnu.org

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).