【发布时间】:2016-06-23 02:45:09
【问题描述】:
考虑以下代码:
template<typename F>
struct S;
template<typename Ret, typename... Args>
struct S<Ret(Args...)> { };
template<typename... Args>
using Alias = S<void(Args...)>;
int main() {
S<void(int)> s;
Alias<int> alias;
}
它工作正常,正如预期的那样,涉及S 的行和涉及Alias 的行都在引擎盖下定义了相同的类型S<void(int)>。
现在,考虑以下更改:
int main() {
S<void(void)> s; // this line compiles
Alias<void> alias; // this line does not
}
我希望它能够编译,原因与上述类似。
不言而喻,由于涉及Alias的行,它没有编译,而是我得到了错误:
代替'模板使用别名 = S [with Args = {void}]'
[...]
错误:无效的参数类型'void'
问题很简单:我在这里错过了什么?
【问题讨论】:
标签: c++ templates c++11 void template-aliases