回答編集履歴
6
余計なSFINAEに対する言及を削除
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
`N/2`であれば、任意の`N: usize`でコンパイルエラーにならないことが(少なくとも人間には)わかりますが、例えば`[0; N-1]`の場合、`N = 0`とするとコンパイルできませんよね.
|
2
|
-
Rustは
|
2
|
+
RustではC++(17以前としておきます)のtemplateとは異なり、ジェネリック境界を適切に定義する必要があります.
|
3
|
-
関数本体のブロックの中は境界にならない
|
3
|
+
関数本体のブロックの中は境界にならないので、代わりに`where [(); N/2]`と書くことで、`[(); N/2]`、ひいては`[i32; N/2]`等が有効な型であることを境界条件としているのでしょう.
|
4
4
|
|
5
5
|
参考:[Const well-formedness and const equality](https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view)
|
5
fix typo
answer
CHANGED
@@ -2,6 +2,4 @@
|
|
2
2
|
Rustは、C++にはあるSFINAE(参考:[https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html](https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html))がなく、ジェネリック境界を適切に定義する必要があります.
|
3
3
|
関数本体のブロックの中は境界にならない(それはもはやSFINAEです)ので、代わりに`where [(); N/2]`と書くことで、`[(); N/2]`、ひいては`[i32; N/2]`等が有効な型であることを境界条件としているのでしょう.
|
4
4
|
|
5
|
-
参考:[Const well-formedness and const equality](https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view)
|
5
|
+
参考:[Const well-formedness and const equality](https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view)
|
6
|
-
|
7
|
-
nightly
|
4
Nの型を明示
answer
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
`N/2`であれば、任意の`N`でコンパイルエラーにならないことが(少なくとも人間には)わかりますが、例えば`[0; N-1]`の場合、`N=0`とするとコンパイルできませんよね.
|
1
|
+
`N/2`であれば、任意の`N: usize`でコンパイルエラーにならないことが(少なくとも人間には)わかりますが、例えば`[0; N-1]`の場合、`N = 0`とするとコンパイルできませんよね.
|
2
2
|
Rustは、C++にはあるSFINAE(参考:[https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html](https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html))がなく、ジェネリック境界を適切に定義する必要があります.
|
3
3
|
関数本体のブロックの中は境界にならない(それはもはやSFINAEです)ので、代わりに`where [(); N/2]`と書くことで、`[(); N/2]`、ひいては`[i32; N/2]`等が有効な型であることを境界条件としているのでしょう.
|
4
4
|
|
5
|
-
参考:[Const well-formedness and const equality](https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view)
|
5
|
+
参考:[Const well-formedness and const equality](https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view)
|
6
|
+
|
7
|
+
nightly
|
3
URLをリンクにした
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
`N/2`であれば、任意の`N`でコンパイルエラーにならないことが(少なくとも人間には)わかりますが、例えば`[0; N-1]`の場合、`N=0`とするとコンパイルできませんよね.
|
2
|
-
RustはC++
|
2
|
+
Rustは、C++にはあるSFINAE(参考:[https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html](https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html))がなく、ジェネリック境界を適切に定義する必要があります.
|
3
|
-
関数本体のブロックは境界にならない(それはもはやSFINAEです)ので、代わりに`where [(); N/2]`と書くことで、`[(); N/2]`、ひいては`[i32; N/2]`等が有効な型であることを境界条件としているのでしょう.
|
3
|
+
関数本体のブロックの中は境界にならない(それはもはやSFINAEです)ので、代わりに`where [(); N/2]`と書くことで、`[(); N/2]`、ひいては`[i32; N/2]`等が有効な型であることを境界条件としているのでしょう.
|
4
4
|
|
5
5
|
参考:[Const well-formedness and const equality](https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view)
|
2
URLをリンクにした
answer
CHANGED
File without changes
|
1
URLをリンクにした
answer
CHANGED
@@ -2,4 +2,4 @@
|
|
2
2
|
RustはC++と違って、SFINAE(参考:https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html)がなく、ジェネリック境界を適切に定義する必要があります.
|
3
3
|
関数本体のブロックは境界にならない(それはもはやSFINAEです)ので、代わりに`where [(); N/2]`と書くことで、`[(); N/2]`、ひいては`[i32; N/2]`等が有効な型であることを境界条件としているのでしょう.
|
4
4
|
|
5
|
-
参考:https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view
|
5
|
+
参考:[Const well-formedness and const equality](https://hackmd.io/OZG_XiLFRs2Xmw5s39jRzA?view)
|