[Boost-users] boost/parameter/keyword.hpp warning, TI compiler

33 views
Skip to first unread message

Krzysztof Czainski

unread,
Dec 2, 2010, 2:04:04 PM12/2/10
to boost...@lists.boost.org
Hello,

When I compile a file, that consists of only one line:

#include <boost/parameter/keyword.hpp>

with a Texas Intstruments compiler for DSP (cgtools-6.1.12); boost-1.45.0, I get this warning:

boost/parameter/aux_/void.hpp, line 20: warning #1369-D: static local variables of extern inline function are not resolved to single copy. Not ANSI C++ Compliant

It referes to:
  inline void_& void_reference()
  {
      static void_ instance;
      return instance;
  }

In this particular context this warning seams harmless, so I would like to suppress it. As far as I know, this compiler doesn't have a #pragma warning(disable:1369) equivalent...

I know how suppress this kind of warning globally, but I would not like that, because in other contexts this is an important warning.

Any ideas, how I could suppress this warning locally, in code perhaps?

Cheers
Kris

Krzysztof Czainski

unread,
Dec 2, 2010, 2:25:26 PM12/2/10
to boost...@lists.boost.org
2010/12/2 Krzysztof Czainski <1cza...@gmail.com>

A fix I came up with is modifying void.hpp like this:

#ifdef __TI_COMPILER_VERSION__
  namespace { void_ void_instance = {}; }
#endif // __TI_COMPILER_VERSION__

  inline void_& void_reference()
  {
#ifdef __TI_COMPILER_VERSION__
      return void_instance;
#else // __TI_COMPILER_VERSION__

      static void_ instance;
      return instance;
#endif // __TI_COMPILER_VERSION__
  }

Does anyone see any downsides?

Regards,
Kris

Ian Bruntlett

unread,
Dec 2, 2010, 2:39:04 PM12/2/10
to boost...@lists.boost.org
Hi Kris,

If this message comes across as a style issue, please feel free to ignore it.

In the past, when having to support different platforms, I've had to use things like "#ifdef THIS_PLATFORM". However, I did it slightly different to you.

Instead of having multiple #ifdef THIS_PLATFORM within a function, I would wrap the entire function definition withing a single "#ifdef THIS_PLATFORM"

HTH,


Ian

_______________________________________________
Boost-users mailing list
Boost...@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users



--
-- ACCU - Professionalism in programming - http://www.accu.org/

Václav Haisman

unread,
Dec 3, 2010, 4:47:09 AM12/3/10
to boost...@lists.boost.org
On Thu, 2 Dec 2010 20:25:26 +0100, Krzysztof Czainski wrote:
> 2010/12/2 Krzysztof Czainski

> Hello,
>
> When I compile a file, that consists of only one line:
>
> #include
>
> with a Texas Intstruments compiler for DSP (cgtools-6.1.12);
> boost-1.45.0, I get this warning:
>
> boost/parameter/aux_/void.hpp, line 20: warning #1369-D: static local
> variables of extern inline function are not resolved to single copy.
> Not ANSI C++ Compliant
>
> It referes to:
>   inline void_& void_reference()
>   {
>       static void_ instance;
>       return instance;
>   }
>
> In this particular context this warning seams harmless, so I would
> like to suppress it. As far as I know, this compiler doesn't have a
> #pragma warning(disable:1369) equivalent...
>
> I know how suppress this kind of warning globally, but I would not
> like that, because in other contexts this is an important warning.
>
> Any ideas, how I could suppress this warning locally, in code
> perhaps?
>
> Cheers
> Kris
>
> A fix I came up with is modifying void.hpp like this:
>
> #ifdef __TI_COMPILER_VERSION__
>   namespace { void_ void_instance = {}; }
> #endif // __TI_COMPILER_VERSION__
Does this not violate the ODR? The anonymous namespace is different for
each TU => void_reference() will be different in each TU.

>
>   inline void_& void_reference()
>   {
> #ifdef __TI_COMPILER_VERSION__
>       return void_instance;
> #else // __TI_COMPILER_VERSION__
>       static void_ instance;
>       return instance;
> #endif // __TI_COMPILER_VERSION__
>   }
>
> Does anyone see any downsides?

See above.

--
VH

Krzysztof Czainski

unread,
Dec 3, 2010, 5:36:52 AM12/3/10
to boost...@lists.boost.org
2010/12/3 Václav Haisman <v.ha...@sh.cvut.cz>
On Thu, 2 Dec 2010 20:25:26 +0100, Krzysztof Czainski wrote:
2010/12/2 Krzysztof Czainski

#ifdef __TI_COMPILER_VERSION__
  namespace { void_ void_instance = {}; }
#endif // __TI_COMPILER_VERSION__
Does this not violate the ODR? The anonymous namespace is different for each TU => void_reference() will be different in each TU.


  inline void_& void_reference()
   {
#ifdef __TI_COMPILER_VERSION__
      return void_instance;
#else // __TI_COMPILER_VERSION__
      static void_ instance;
      return instance;
#endif // __TI_COMPILER_VERSION__
  }

--
VH

Thanks for pointing this out. In that case, what do You think of putting the whole void_reference() function into an anonymous namespace?

Regards
Kris
Reply all
Reply to author
Forward
0 new messages