Re: initialization sequence in header file
This is a MIME GnuPG-signed message. If you see this text, it means that
your E-mail or Usenet software does not support MIME signed messages.
The Internet standard for MIME PGP messages, RFC 2015, was published in 1996.
To open this message correctly you will need to install E-mail or Usenet
software that supports modern Internet standards.
--=_mimegpg-monster.email-scan.com-8483-1333749726-0008
Content-Type: text/plain; format=flowed; delsp=yes; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
zl2k writes:
I have a header file like this:
#include <map>
#include <set>
struct SET_CREATOR{
static std::set<std::string> CreateSet() {
std::set<std::string> string_set;
string_set.insert("ab");
return string_set;
}
};
static std::set<std::string> MY_STRING_SET(SET_CREATOR::CreateSet());
struct MAP_CREATOR{
static std::map<std::string, std::string> CreateMap() {
std::map<std::string, std::string> string_map;
std::cout<<*MY_STRING_SET.cbegin()<<std::endl; // segmentation
error here
return string_map;
}
};
static std::map<std::string, std::string>
MY_STRING_MAP(MAP_CREATOR::CreateMap());
My question is: how may I initialize MY_STRING_SET properly so that it
can be used by other struct in the same header file? Thanks for help.
Your test program compiles and runs fine without any problems reported by
gcc 4.6.3. The only potential ill-formed behavior I see here would be if
your MY_STRING_SET is not initialized when your MY_STRING_MAP gets
initialized.
My read of 3.6.2 is that these static objects are required to have ordered
initialization, so they must be initialized "in the order of their
definitions in the translation unit". A debugger should help you confirm the
order of initialization. Set breakpoints in CreateSet() and CreateMap(), and
see which one gets hit first. If my read of 3.6.2 is correct, your compiler
has a bug.
--=_mimegpg-monster.email-scan.com-8483-1333749726-0008
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iEYEABECAAYFAk9/Z94ACgkQx9p3GYHlUOJ8AACeOhQpcWuUeYyJZih1HOcGSiYX
LfsAmgMCae+y6p83k/vEBsLrEB9mvuQw
=IyiF
-----END PGP SIGNATURE-----
--=_mimegpg-monster.email-scan.com-8483-1333749726-0008--