public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
@ 2013-10-13 12:20 ali.baharev at gmail dot com
  2013-10-14  0:10 ` [Bug c++/58713] " redi at gcc dot gnu.org
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: ali.baharev at gmail dot com @ 2013-10-13 12:20 UTC (permalink / raw)
  To: gcc-bugs

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="UTF-8", Size: 11863 bytes --]

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

            Bug ID: 58713
           Summary: error: cannot bind ‘std::ostream {aka
                    std::basic_ostream<char>}’ lvalue to
                    ‘std::basic_ostream<char>&&’
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ali.baharev at gmail dot com

#include <iostream>

struct A { };

int main() {
    A a;
    std::cout << a;
}
-----

g++ 4.8.1, 64 bit with -std=c++11 gives the correct error message:

main.cpp:7:15: error: no match for ‘operator<<’ (operand types are
‘std::ostream {aka std::basic_ostream<char>}’ and ‘A’)
     std::cout << a;
               ^

However, 4.8.1, 32 bit or 4.7.2, 64 bit gives:

prog.cpp:7:18: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’
lvalue to ‘std::basic_ostream<char>&&’
     std::cout << a;
                  ^
In file included from /usr/include/c++/4.8/iostream:39:0,
                 from prog.cpp:1:
/usr/include/c++/4.8/ostream:602:5: error:   initializing argument 1 of
‘std::basic_ostream<_CharT, _Traits>&
std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT
= char; _Traits = std::char_traits<char>; _Tp = A]’
     operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
     ^

Could this rather confusing error message be improved?

Why do the 32 and 64 bit versions behave differently?
>From gcc-bugs-return-431579-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Sun Oct 13 12:33:44 2013
Return-Path: <gcc-bugs-return-431579-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 12542 invoked by alias); 13 Oct 2013 12:33:44 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 12491 invoked by uid 48); 13 Oct 2013 12:33:40 -0000
From: "manu at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c/58488] -Wuninitialized is useless for a variable whose address is later taken
Date: Sun, 13 Oct 2013 12:33:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c
X-Bugzilla-Version: 4.8.1
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: manu at gcc dot gnu.org
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-58488-4-xt6z1dRz0E@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58488-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58488-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00723.txt.bz2
Content-length: 482

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

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mimomorin at gmail dot com

--- Comment #5 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
*** Bug 58711 has been marked as a duplicate of this bug. ***
>From gcc-bugs-return-431580-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Sun Oct 13 12:33:44 2013
Return-Path: <gcc-bugs-return-431580-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 12556 invoked by alias); 13 Oct 2013 12:33:44 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 12476 invoked by uid 48); 13 Oct 2013 12:33:39 -0000
From: "manu at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug middle-end/58711] Missing "uninitialized" warning in loop condition (when compiling without optimization)
Date: Sun, 13 Oct 2013 12:33:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: middle-end
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: manu at gcc dot gnu.org
X-Bugzilla-Status: RESOLVED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_status cc resolution
Message-ID: <bug-58711-4-LC8MM8kU6c@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58711-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58711-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00724.txt.bz2
Content-length: 609

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

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
                 CC|                            |manu at gcc dot gnu.org
         Resolution|---                         |DUPLICATE

--- Comment #1 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
Known issue.

*** This bug has been marked as a duplicate of bug 58488 ***
>From gcc-bugs-return-431581-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Sun Oct 13 12:39:29 2013
Return-Path: <gcc-bugs-return-431581-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 16014 invoked by alias); 13 Oct 2013 12:39:29 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 15993 invoked by uid 48); 13 Oct 2013 12:39:26 -0000
From: "ali.baharev at gmail dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/58714] New: Bogus value category in ternary operator?
Date: Sun, 13 Oct 2013 12:39:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: new
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c++
X-Bugzilla-Version: 4.8.1
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: ali.baharev at gmail dot com
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter
Message-ID: <bug-58714-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00725.txt.bz2
Content-length: 1075

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

            Bug ID: 58714
           Summary: Bogus value category in ternary operator?
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ali.baharev at gmail dot com

struct X {
  X& operator=(const X&) = delete;
  X& operator=(X&& ) = default;
};

void f(bool t) {
  X a, b;
  *(t ? &a : &b) = X();
  (t ? a : b) = X();
}
-----
The line:

  (t ? a : b) = X();

gives:

error: use of deleted function ‘X& X::operator=(const X&)’

The code compiles with clang++ 3.4. 

The sections in the Standard relevant here are: [expr.cond]/4 "If the second
and third operands [of the conditional operator] are glvalues of the same value
category and have the same type, the result is of that type and value category"
(text in brackets inserted for clarity).

This code was posted at stackoverflow.com/q/19341908/341970
>From gcc-bugs-return-431582-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Sun Oct 13 12:41:08 2013
Return-Path: <gcc-bugs-return-431582-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 17158 invoked by alias); 13 Oct 2013 12:41:07 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 17115 invoked by uid 48); 13 Oct 2013 12:41:05 -0000
From: "burnus at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libgomp/58691] OpenMP 4: Surprising results with OMP_PLACESDate: Sun, 13 Oct 2013 12:41:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: libgomp
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: burnus at gcc dot gnu.org
X-Bugzilla-Status: RESOLVED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: jakub at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_status resolution
Message-ID: <bug-58691-4-n5vXy3sLsp@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58691-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58691-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00726.txt.bz2
Content-length: 909

http://gcc.gnu.org/bugzilla/show_bug.cgi?idX691

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #3)
> That command line doesn't set explicit OMP_PROC_BINDúlse, it sets
> OMP_PLACES twice,

Ups!

> I'll go ahead and commit the patch.

Thanks! Looks good to me. As the issue is solved and as OMP_PLACES is new in
GCC 4.9, I close this bug as FIXED.


> libgomp.texi needs much more updates for OpenMP 4.0

I will create a patch for the run-time library and environment variable parts
of the documentation. But I leave the libgomp API update to you.


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

* [Bug c++/58713] error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
  2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
@ 2013-10-14  0:10 ` redi at gcc dot gnu.org
  2013-10-14  0:22 ` ali.baharev at gmail dot com
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: redi at gcc dot gnu.org @ 2013-10-14  0:10 UTC (permalink / raw)
  To: gcc-bugs

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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Ali Baharev from comment #0)
> Could this rather confusing error message be improved?

I've tried to improve it in the past, but I think there's no easy way to do it.


> Why do the 32 and 64 bit versions behave differently?

They don't.  I think maybe you forgot to use -std=c++11 in the first case?


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

* [Bug c++/58713] error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
  2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
  2013-10-14  0:10 ` [Bug c++/58713] " redi at gcc dot gnu.org
@ 2013-10-14  0:22 ` ali.baharev at gmail dot com
  2013-10-14  6:29 ` daniel.kruegler at googlemail dot com
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: ali.baharev at gmail dot com @ 2013-10-14  0:22 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Ali Baharev <ali.baharev at gmail dot com> ---
>> Why do the 32 and 64 bit versions behave differently?
> 
> They don't.  I think maybe you forgot to use -std=c++11 in the first case?

Yes, that's what happened. Sorry, my mistake.


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

* [Bug c++/58713] error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
  2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
  2013-10-14  0:10 ` [Bug c++/58713] " redi at gcc dot gnu.org
  2013-10-14  0:22 ` ali.baharev at gmail dot com
@ 2013-10-14  6:29 ` daniel.kruegler at googlemail dot com
  2013-10-14  7:04 ` glisse at gcc dot gnu.org
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-10-14  6:29 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Daniel Krügler <daniel.kruegler at googlemail dot com> ---
(In reply to Jonathan Wakely from comment #1)
> I've tried to improve it in the past, but I think there's no easy way to do
> it.

A possible fix might be to change the Standard ;-) Despite the smiley I
seriously consider to make the proposal/open an issue that the "all-eating"
signature

template <class charT, class traits, class T>
basic_ostream<charT, traits>&
operator<<(basic_ostream<charT, traits>&& os, const T& x);

should be constrained and should not participate in overload resolution unless
the expression

os << x

would be well-formed (similar for the corresponding extractor). My current
guess is that this would also improve the diagnostics in this case, is that
right?
>From gcc-bugs-return-431604-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Mon Oct 14 06:29:09 2013
Return-Path: <gcc-bugs-return-431604-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 7302 invoked by alias); 14 Oct 2013 06:29:08 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 7149 invoked by uid 48); 14 Oct 2013 06:29:04 -0000
From: "samsonov at google dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug sanitizer/58718] Invalid check in libsanitizer
Date: Mon, 14 Oct 2013 06:29:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: sanitizer
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: samsonov at google dot com
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-58718-4-zOM851JFIn@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58718-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58718-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00748.txt.bz2
Content-length: 556

http://gcc.gnu.org/bugzilla/show_bug.cgi?idX718

Alexey Samsonov <samsonov at google dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |samsonov at google dot com

--- Comment #2 from Alexey Samsonov <samsonov at google dot com> ---
I've already fixed the problem with crashes caused by small
"malloc_context_size" values. I think you should wait till the ASan runtime
will be merged from LLVM into GCC.


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

* [Bug c++/58713] error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
  2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
                   ` (2 preceding siblings ...)
  2013-10-14  6:29 ` daniel.kruegler at googlemail dot com
@ 2013-10-14  7:04 ` glisse at gcc dot gnu.org
  2013-10-14  7:09 ` daniel.kruegler at googlemail dot com
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: glisse at gcc dot gnu.org @ 2013-10-14  7:04 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Marc Glisse <glisse at gcc dot gnu.org> ---
If I try to sfinae-out this function based on os<<x being well-formed, I get an
error that "template instantiation depth exceeds maximum of 900" (even for a
valid cout<<42), because even if this overload won't match, it still looks at
it recursively.


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

* [Bug c++/58713] error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
  2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
                   ` (3 preceding siblings ...)
  2013-10-14  7:04 ` glisse at gcc dot gnu.org
@ 2013-10-14  7:09 ` daniel.kruegler at googlemail dot com
  2013-10-14 13:17 ` daniel.kruegler at googlemail dot com
  2013-10-14 13:26 ` redi at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-10-14  7:09 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Daniel Krügler <daniel.kruegler at googlemail dot com> ---
(In reply to Marc Glisse from comment #4)
> If I try to sfinae-out this function based on os<<x being well-formed, I get
> an error that "template instantiation depth exceeds maximum of 900" (even
> for a valid cout<<42), because even if this overload won't match, it still
> looks at it recursively.

Thanks for your test, Marc. I will reflect upon the problem in a bit more
detail (Let me add that I had thought a while longer about that problem before
this issue cam up but when I added my note to the issue about the actual sfinae
form this was just of the top of my head).
>From gcc-bugs-return-431615-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Mon Oct 14 07:13:25 2013
Return-Path: <gcc-bugs-return-431615-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 3765 invoked by alias); 14 Oct 2013 07:13:25 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 3588 invoked by uid 48); 14 Oct 2013 07:13:22 -0000
From: "jakub at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/57511] [4.8 Regression] Missing SCEV final value replacement
Date: Mon, 14 Oct 2013 07:13:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: tree-optimization
X-Bugzilla-Version: 4.8.0
X-Bugzilla-Keywords: missed-optimization
X-Bugzilla-Severity: normal
X-Bugzilla-Who: jakub at gcc dot gnu.org
X-Bugzilla-Status: ASSIGNED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: rguenth at gcc dot gnu.org
X-Bugzilla-Target-Milestone: 4.8.2
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: cc
Message-ID: <bug-57511-4-LAl6nm84Ym@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-57511-4@http.gcc.gnu.org/bugzilla/>
References: <bug-57511-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00759.txt.bz2
Content-length: 440

http://gcc.gnu.org/bugzilla/show_bug.cgi?idW511

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |masoud_mxm at yahoo dot com

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
*** Bug 58717 has been marked as a duplicate of this bug. ***


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

* [Bug c++/58713] error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
  2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
                   ` (4 preceding siblings ...)
  2013-10-14  7:09 ` daniel.kruegler at googlemail dot com
@ 2013-10-14 13:17 ` daniel.kruegler at googlemail dot com
  2013-10-14 13:26 ` redi at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-10-14 13:17 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Daniel Krügler <daniel.kruegler at googlemail dot com> ---
(In reply to Daniel Krügler from comment #5)
> Thanks for your test, Marc. I will reflect upon the problem in a bit more
> detail

My current guess is that my suggested approach should work, assuming a proper
helper trait template will be used. Here is the model code that I used for
testing:

//---------------------------
#include <type_traits>
#include <utility>

namespace xstd {

template<class CharT = char>
struct OStream 
{
  OStream& operator<<(int);
  OStream& operator<<(short);
  OStream& operator<<(double);
  OStream& operator<<(const void*);
};

struct is_ostreamable_impl 
{
  template<class CharT, class T, class =
    decltype(std::declval<OStream<CharT>&>() << std::declval<T>())>
  static std::true_type test(int);

  template<class, class>
  static std::false_type test(...);
};

template<class CharT, class T>
struct is_ostreamable 
  : decltype(is_ostreamable_impl::test<CharT, T>(0))::type
{  
};

template<class CharT, class T,
  typename std::enable_if<
    is_ostreamable<CharT, const T&>::value, 
    bool
  >::type = false>
  OStream<CharT>& operator<<(OStream<CharT>&& os, const T& t) 
{
  return os << t;
}

OStream<> out;

}

struct A {};

int main() {
  A a;
  xstd::out << 1;
  xstd::out << a;
}
//---------------------------

The diagnostics of my gcc current 4.9.0 is

<quote>
main.cpp||In function 'int main()':|
main.cpp|50|error: no match for 'operator<<' (operand types are
'xstd::OStream<>' and 'A')|
main.cpp|50|note: candidates are:|
main.cpp|9|note: xstd::OStream<CharT>& xstd::OStream<CharT>::operator<<(int)
[with CharT = char]|
main.cpp|9|note:   no known conversion for argument 1 from 'A' to 'int'|
main.cpp|10|note: xstd::OStream<CharT>& xstd::OStream<CharT>::operator<<(short
int) [with CharT = char]|
main.cpp|10|note:   no known conversion for argument 1 from 'A' to 'short int'|
main.cpp|11|note: xstd::OStream<CharT>&
xstd::OStream<CharT>::operator<<(double) [with CharT = char]|
main.cpp|11|note:   no known conversion for argument 1 from 'A' to 'double'|
main.cpp|12|note: xstd::OStream<CharT>& xstd::OStream<CharT>::operator<<(const
void*) [with CharT = char]|
main.cpp|12|note:   no known conversion for argument 1 from 'A' to 'const
void*'|
main.cpp|36|note: template<class CharT, class T, typename
std::enable_if<xstd::is_ostreamable<CharT, const T&>::value, bool>::type
<anonymous> > xstd::OStream<CharT>& xstd::operator<<(xstd::OStream<CharT>&&,
const T&)|
main.cpp|36|note:   template argument deduction/substitution failed:|
main.cpp|35|error: no type named 'type' in 'struct std::enable_if<false,
bool>'|
main.cpp|35|note: invalid template non-type parameter|
</quote>
>From gcc-bugs-return-431655-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Mon Oct 14 13:18:50 2013
Return-Path: <gcc-bugs-return-431655-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 19904 invoked by alias); 14 Oct 2013 13:18:50 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 19854 invoked by uid 48); 14 Oct 2013 13:18:47 -0000
From: "ro at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libfortran/58015] FAIL: gfortran.dg/round_4.f90: Unsatisfied symbol "nextafterl"
Date: Mon, 14 Oct 2013 13:18:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: libfortran
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: ro at gcc dot gnu.org
X-Bugzilla-Status: NEW
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: 4.9.0
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: cf_gcctarget bug_status cf_reconfirmed_on cc cf_gcchost target_milestone everconfirmed cf_gccbuild
Message-ID: <bug-58015-4-m7rdtjqHb2@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58015-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58015-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00799.txt.bz2
Content-length: 1032

http://gcc.gnu.org/bugzilla/show_bug.cgi?idX015

Rainer Orth <ro at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|hppa64-hp-hpux11.11         |hppa64-hp-hpux11.11,
                   |                            |*-*-solaris2.9
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-10-14
                 CC|                            |ro at gcc dot gnu.org
               Host|hppa64-hp-hpux11.11         |hppa64-hp-hpux11.11,
                   |                            |*-*-solaris2.9
   Target Milestone|---                         |4.9.0
     Ever confirmed|0                           |1
              Build|hppa64-hp-hpux11.11         |hppa64-hp-hpux11.11,
                   |                            |*-*-solaris2.9

--- Comment #5 from Rainer Orth <ro at gcc dot gnu.org> ---
Also on Solaris 9, both SPARC and x86.

  Rainer


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

* [Bug c++/58713] error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
  2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
                   ` (5 preceding siblings ...)
  2013-10-14 13:17 ` daniel.kruegler at googlemail dot com
@ 2013-10-14 13:26 ` redi at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: redi at gcc dot gnu.org @ 2013-10-14 13:26 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Daniel Krügler from comment #3)
> guess is that this would also improve the diagnostics in this case, is that
> right?

Even if it worked (which it doesn't, as Marc also discovered) it would only
help a little bit, because G++ still prints all the candidates even if they are
not viable due to substitution failure. (Usually I love this feature, but when
there are a very large number of overloads, such as anything using operator<<,
the diagnostics can be overwhelming.)

(In reply to Daniel Krügler from comment #6)
> The diagnostics of my gcc current 4.9.0 is
> 
> <quote>
> main.cpp||In function 'int main()':|
> main.cpp|50|error: no match for 'operator<<' (operand types are
> 'xstd::OStream<>' and 'A')|
> main.cpp|50|note: candidates are:|
> main.cpp|9|note: xstd::OStream<CharT>& xstd::OStream<CharT>::operator<<(int)
> [with CharT = char]|
> main.cpp|9|note:   no known conversion for argument 1 from 'A' to 'int'|
> main.cpp|10|note: xstd::OStream<CharT>&
> xstd::OStream<CharT>::operator<<(short int) [with CharT = char]|
> main.cpp|10|note:   no known conversion for argument 1 from 'A' to 'short
> int'|
> main.cpp|11|note: xstd::OStream<CharT>&
> xstd::OStream<CharT>::operator<<(double) [with CharT = char]|
> main.cpp|11|note:   no known conversion for argument 1 from 'A' to 'double'|
> main.cpp|12|note: xstd::OStream<CharT>&
> xstd::OStream<CharT>::operator<<(const void*) [with CharT = char]|
> main.cpp|12|note:   no known conversion for argument 1 from 'A' to 'const
> void*'|
> main.cpp|36|note: template<class CharT, class T, typename
> std::enable_if<xstd::is_ostreamable<CharT, const T&>::value, bool>::type
> <anonymous> > xstd::OStream<CharT>& xstd::operator<<(xstd::OStream<CharT>&&,
> const T&)|
> main.cpp|36|note:   template argument deduction/substitution failed:|
> main.cpp|35|error: no type named 'type' in 'struct std::enable_if<false,
> bool>'|
> main.cpp|35|note: invalid template non-type parameter|
> </quote>

This does look better.  I thought I'd experimented with a similar trait(*) and
found the results disappointing.

(*)
https://gitorious.org/redistd/redistd/source/33d8d3a4f49da25e71ca87aab674d3b88500d302:include/redi/printers.h
>From gcc-bugs-return-431657-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Mon Oct 14 13:44:27 2013
Return-Path: <gcc-bugs-return-431657-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 15070 invoked by alias); 14 Oct 2013 13:44:27 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 15039 invoked by uid 48); 14 Oct 2013 13:44:24 -0000
From: "3dw4rd at verizon dot net" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/58708] string literal operator templates broken
Date: Mon, 14 Oct 2013 13:44:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c++
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: 3dw4rd at verizon dot net
X-Bugzilla-Status: NEW
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields:
Message-ID: <bug-58708-4-kH489RvsxE@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-58708-4@http.gcc.gnu.org/bugzilla/>
References: <bug-58708-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2013-10/txt/msg00801.txt.bz2
Content-length: 223

http://gcc.gnu.org/bugzilla/show_bug.cgi?idX708

--- Comment #5 from Ed Smith-Rowland <3dw4rd at verizon dot net> ---
The const qualification of the first parm and the number of elements are wrong.
 I'm testing a patch.


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

end of thread, other threads:[~2013-10-14 13:26 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-13 12:20 [Bug c++/58713] New: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ ali.baharev at gmail dot com
2013-10-14  0:10 ` [Bug c++/58713] " redi at gcc dot gnu.org
2013-10-14  0:22 ` ali.baharev at gmail dot com
2013-10-14  6:29 ` daniel.kruegler at googlemail dot com
2013-10-14  7:04 ` glisse at gcc dot gnu.org
2013-10-14  7:09 ` daniel.kruegler at googlemail dot com
2013-10-14 13:17 ` daniel.kruegler at googlemail dot com
2013-10-14 13:26 ` redi 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).