回答編集履歴
1
a
test
CHANGED
@@ -4,4 +4,22 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
`template <typename T, typename std::enable_if<std::is_same<T, int>::value>::type>`の場合、`typename std::enable_if<std::is_same<T, int>::value>::type`って`int`とかと同じただの型名なので、
|
7
|
+
`template <typename T, typename std::enable_if<std::is_same<T, int>::value>::type>`の場合、`typename std::enable_if<std::is_same<T, int>::value>::type`って`int`とかと同じただの型名なのですが、enable_ifの第一引数に`true`が渡った時、`void`型になります。ところがvoid型の値は存在しませんから、どうやっても呼び出せません。`template<int n>`みたいなのを思い出して下さい
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
なお、SFINAEのやり方自体はお示しのものよりは
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
```cpp
|
16
|
+
|
17
|
+
template<typename T, std::enable_if_t<std::is_same_v<T, int>, std::nullptr_t> = nullptr>
|
18
|
+
|
19
|
+
```
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
を使うことが多いように思います。
|
24
|
+
|
25
|
+
[std::enable_ifを使ってオーバーロードする時、enablerを使う?](https://qiita.com/kazatsuyu/items/203584ef4cb8b9e52462)
|