回答編集履歴

1

a

2020/03/11 10:11

投稿

yumetodo
yumetodo

スコア5850

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`とかと同じただの型名なので、それ単体をtemplate仮引数に書ても動くわけはないですね
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)