zou*_*yjs 6 c++ templates language-lawyer c++17 c++20
虽然这个问题似乎有点令人困惑。代码很简单:
template <typename T>
void tfunc(T&& getter)
{
}
template <typename T = void>
void voidfunc()
{}
int main() {
tfunc(&voidfunc); // error: could not deduce template argument for 'T'
tfunc(&voidfunc<int>); // ok
voidfunc(); // calling using default template parameter is ok.
}
Run Code Online (Sandbox Code Playgroud)
clang 11 和 msvc Visual Studio 2019 16.7 都抱怨错误。为什么我需要明确指定模板参数。
voidfunc到使用它的地方的实例化。类型并不重要。&voidfunc由 clangAST 生成的一些代码使用,否则我需要调整生成器来编写&voidfuc<>它是否是模板。__declspec(property(put=voidfunc))然而,这个 clang/msvc 扩展需要voidfunc但不是voidfunc<>&voidfunc<>如果给定的函数是模板,我已经调整了生成器以输出@Jarod42 所说的。它现在有效。
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |