https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79680
Bug ID: 79680
Summary: format attribute cannot be used with template
parameters
Product: gcc
Version: 5.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: [email protected]
Target Milestone: ---
I had logging function with printf-like declaration, and
__attribute__((format(printf, x, y))). For performance reasons I wanted to add
another one, which accepts constant string only without parameters.
Unfortunately when I created such function, gcc started complaining that call
is ambiguous. I found on stackoverflow that I can change one of extra parameter
into ordinary one with type specified via template. Unfortunately this is also
rejected with error "args to be formatted is not ‘...’". I also tried to use
variadic templates with the same results. Please extent the format attribute so
it also could be applied to ordinary parameters.
Code:
void log(const char* str) {}
template<class T>
__attribute((format(printf, 1, 2)))
void log(const char* fmt, T t, ...) {}
template <typename... T>
__attribute((format(printf, 1, 2)))
void log(const char* fmt, T... args) {}
void test()
{
log("a");
log("%d", 1);
}