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