On 16 April 2012 08:11, Diego Ongaro wrote:
> Hi all,
Questions about using GCC should go to the [email protected] list,
not this one.
> I was working on some C++11 template hacks to be able to pass C++ objects to a
> function wrapping printf. What I want to do looks like this, where convert
> might do fancy things like create string representations of objects:
>
> template<typename... Args>
> void Printf(const char* format, Args&&... args)
> {
> printf(format, convert(std::forward<Args>(args))...);
> }
>
> However, it seems that this is incompatible with the
> __attribute__((format(printf, 1, 2))) applied to printf.
>
> When trying to call this function as
> Printf("%d\n", 3);
> I get the following errors:
> In function 'void Printf(const char*, Args&& ...) [with Args = int]':
> instantiated from here
> warning: format not a string literal, argument types not checked
>
> Unfortunately, the compiler believes my format string is not a string literal,
> but it is!
No it isn't, it's a const char*