は、次のコードを考えてみましょうS<void(int)>
。エイリアステンプレート、部分的な特殊化および無効なパラメータの型がvoid
さて、次の変更を検討してください。
int main() {
S<void(void)> s; // this line compiles
Alias<void> alias; // this line does not
}
私はそれが言及した上記のものと類似している理由のため、コンパイルすると予想。
ではなく、私はエラーを取得し、それが原因Alias
を含む行のコンパイルされないことは言うまでもない:
In substitution of 'template using Alias = S [with Args = {void}]'
[...]
error: invalid parameter type 'void'
質問は非常に単純です:私はここに逃した何?
回避策は明らかですが、同じ理由で両方の行のコンパイルに失敗してはいけませんか?また、 'S'は、パラメータが 'void' *の型を持つ関数型を作成しようとしている(うまくいく)。私が間違っている? –
skypjack
@skypjack私が探していたセクションが見つかりました。 'void 'は非依存でなければならない。 – Barry
参考になっていただきありがとうございます。とにかく 'template構造体S {};'同じ型の問題を抱える依存型でも、 –
skypjack