This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: vector<bool> _M_start and 0 offset


On 17/09/18 20:10 +0100, Jonathan Wakely wrote:
On 17/09/18 21:55 +0300, Ville Voutilainen wrote:
On Mon, 17 Sep 2018 at 21:50, Jonathan Wakely <jwakely@redhat.com> wrote:
"I used C++11 syntax because I find it nicer, and the compiler accepts
it in C++98 mode with just a warning, suppressed in a standard
header."

Oh sorry, I just looked at the patch and replied without reading the
top bit.

Even with -Wsystem-headers I don't get a warning, I have to precompile
with -P -E then compile the result to get "warning: extended
initializer lists only available with -std=c++11 or -std=gnu++11".

OK for trunk then.

Do other compilers besides gcc suppress the same way?

No, clang doesn't:

In file included from bv.cc:1:
In file included from /home/jwakely/gcc/latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/../../../../include/c++/9.0.0/vector:65:
/home/jwakely/gcc/latest/lib/gcc/x86_64-pc-linux-gnu/9.0.0/../../../../include/c++/9.0.0/bits/stl_bvector.h:812:16: error: non-aggregate type 'std::vector<bool, type-parameter-0-0>::iterator' (aka 'std::_Bit_iterator') cannot be initialized with an initializer list
    { return { this->_M_impl._M_start, 0 }; }

And for the avoidance of doubt, it's the same error if I make the
correct change to the header:

     { return { this->_M_impl._M_start._M_p, 0 }; }


             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bv.cc:6:5: note: in instantiation of member function 'std::vector<bool, std::allocator<bool> >::begin' requested here
b.begin();
  ^
1 error generated.

So I do think we should stick to C++98 syntax.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]