考虑以下代码:
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'
问题很简单:我在这里错过了什么?