On Wed, 7 Nov 2018 22:31:20 +0100
Christian Weisgerber <[email protected]> wrote:
> The much bigger question is how gcc6 will fare on the non-clang
> archs that would use if for all C++ ports. In principle I agree
> that gcc4.9 is too old and a new compiler will be required for newer
> C++ code.
I have some C++ examples that give errors in gcc 4.9 on powerpc, but
work in clang on amd64. I would try the gcc 6 diff on my PowerBook G4
running OpenBSD/macppc. I can't try it soon, because my G4 is low of
disk space, and it needed about 18 hours to build gcc 4.9 (including
Ada and Fortran). So I need to free some disk space, then wait for
gcc 6 to build before I can try it.
This first example shows a problem with initializer lists.
It reproduces the error from devel/vte3/patches/patch-src_app_app_cc.
=initlist.cc
struct s { double a; double b; };
extern s s1;
void f() {
s s2{s1};
}
=end
$ eg++ -std=c++1y -c initlist.cc
initlist.cc: In function 'void f()':
initlist.cc:4:9: error: cannot convert 's' to 'double' in initialization
s s2{s1};
^
This second example shows a problem with std::unique_ptr. I got a
similar error from git master of https://github.com/SuperTux/supertux
(but not from games/supertux in ports).
=panda.cc
#include <memory>
struct bear { virtual ~bear() = default; };
struct panda: bear {};
std::unique_ptr<bear> f() {
auto p = std::make_unique<panda>();
return p;
}
=end
$ eg++ -std=c++1y -c panda.cc
panda.cc: In function 'std::unique_ptr<bear> f()':
panda.cc:6:9: error: cannot bind 'std::unique_ptr<panda,
std::default_delete<panda> >' lvalue to 'std::unique_ptr<panda,
std::default_delete<panda> >&&'
return p;
^
In file included from /usr/local/include/c++/4.9.4/memory:81:0,
from panda.cc:1:
/usr/local/include/c++/4.9.4/bits/unique_ptr.h:220:2: note: initializing
argument 1 of 'std::unique_ptr<_Tp, _Dp>::unique_ptr(std::unique_ptr<_Up,
_Ep>&&) [with _Up = panda; _Ep = std::default_delete<panda>;
<template-parameter-2-3> = void; _Tp = bear; _Dp = std::default_delete<bear>]'
unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
^
--
George Koehler <[email protected]>