我有一个带有参数包的函数:
template<typename... Targs>
void tprintf(const char* format, Targs... args) {}
(实现不重要,只是签名)。我想使用 GCC/Clang 内置函数将源位置添加为默认参数。就像是
template<typename... Targs>
void tprintf(const char* format, Targs... args,
const char* file = __builtin_FILE(),
unsigned line = __builtin_LINE()) {}
这可以编译,但对它的调用并没有args
像我希望的那样传递参数;例如
tprintf("%d%s", 0, "a");
给出(在 Clang 10 上)
<source>:7:5: error: no matching function for call to 'tprintf'
tprintf("%d%s", 0, "a");
^~~~~~~
<source>:2:6: note: candidate function template not viable: no known conversion from 'const char [2]' to 'unsigned int' for 3rd argument
void tprintf(const char* format, Targs... args,
^
这似乎表明args
是空的,0
是file
,"a"
是line
。
实际上,在编写问题时,我发现显式传递Targs
有效:
tprintf<int, char*>("%d%s", 0, "a");
有可能避免这种情况吗?