Hello,
I use some boost libraries with a TI compiler. One of it's defects is "static local variables of extern inline function are not resolved to single copy". It emits a warning about it.
My typical workaround for this is making such a function non-inline. This may require to move such a function definition out of a header file, if it isn't a template function.
When I need a non-template function to be defined inside a header file, and return an instance of a static variable, i can't just make that function static (or put it into an unnamed namespace), because there will no longer be a single instance of the returned variable.Therefore I came up with the following:
instead of:
inline int& get_single_int()
{
static int i = 0;
return i;
}
I need:
template < class >
// not inline
int& get_single_int_impl()
{
static int i = 0;
return i;
}
inline int& get_single_int()
{
return get_single_int_impl<void>();
}
I needed to make modifications in two places in boost to work around this defect. I'll be happy to share those modifications, but first I wanted to ask if anyone can think of a better/simpler workaround.
What comes into my mind, that could make this workaround more general, is replacing the line "// not inline" with some macro BOOST_INLINE_STATIC_VAR defined conditionally to 'inline' or nothing.
Thoughts?
Regards,
Kris