Re: Is this safe?
On Jul 5, 10:51 pm, "Chris M. Thomasson" <n...@spam.invalid> wrote:
"Joshua Maurice" <joshuamaur...@gmail.com> wrote in message
news:c9d25c4c-da1b-4eab-b8e7-780fa7c401c6@k13g2000prh.googlegroups.com...
[...]
template <typename singleton_type>
void initialize_singleton()
{ singleton_type * & pointer =
singleton_wrapper_private_impl::get_pointer<singleton_type>();
pointer = new singleton_type;
}
template <typename singleton_type>
singleton_type & singleton_wrapper()
{ //PTHREAD_ONCE_INIT presumably is a const expr,
//and thus C++03 guarantees this happens before runtime.
static pthread_once_t init_flag = PTHREAD_ONCE_INIT;
int x =
pthread_once(
&init_flag,
&initialize_singleton<singleton_type>
);
assert(0 == x);
return *
singleton_wrapper_private_impl::get_pointer<singleton_type>();
}
You have undefined behavior; `initialize_singleton()' needs to be extern
"C".
Indeed. I believe I stated that in my post.
Also, to reduce confusion, my posts were posted here out of order of
when I submitted them, by several days. I wrote and submitted
On Jul 5, 1:48 am, Joshua Maurice <joshuamaur...@gmail.com>
before I wrote and submitted
On Jul 3, 9:09 am, Joshua Maurice <joshuamaur...@gmail.com>
Specifically, yes you can have multiple definitions of static data
members of class templates and not violate the One Definition Rule.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]