SOに参加した後、テンプレートを議論するトピックを開くたびにこの種の構文がよく見られます。私はGoogleで検索しようとしましたが、無駄でした。ここから複雑なC++テンプレートの構文
template<typename T>
char (&f(T[1]))[1]; //what is it? what is the use of '[]' brackets and the integer in it?
template<typename T>
char (&f(...))[2]; //not this either
int main() { char c[sizeof(f<void()>(0)) == 2]; } // and this?
:SFINAE with invalid function-type or array-type parameters?
私がコメントを入れている3行を説明してください。私は特に構文を理解したい。このような構文をテンプレートでのみ使用できますか?
すてきな説明、ありがとう。その愚かな条件でサイズがゼロの配列が作成されたら、なぜその条件を入れましたか? –
目的は、配列サイズの無効を使用して、特定のコードのコンパイルを防止することです(たとえば、特別に処理される特定の型のテンプレートのインスタンス化など)。 –
@Pointer:「コンパイル時アサート」と呼ばれる概念です。 "通常の" assert()は、実行時にブール条件をチェックします。このメソッドを使用すると、コンパイル時にブール条件をチェックできます。たとえば、 'char c [CHAR_BIT == 8]'は、あなたのプログラムが 'CHAR_BIT == 9 ' – MSalters