以下のようなコードの場合、どちらもコンパイル時にエラーとさせるという目的は同じだと思います。
cpp
1template <class T> 2struct X { 3 static_assert(std::is_integral<T>::value, "template parameter T must be integral type"); 4}; 5 6 7template <class T, typename std::enable_if<std::is_integral<T>::value, std::nullptr_t>::type = nullptr > 8struct Y {}; 9 10int main() 11{ 12 X<int>(); 13 //X<double>(); 14 15 Y<int>; 16 //Y<double>(); 17}
基本的にどちらで制限するべきなのでしょうか?
SFINAEを用いたオーバーロードをさせたい場合はenabler、それ以外はstatic_assertで通知すべきでしょうか?
それともstatic_assertには別の目的があるのでしょうか。
static_assertを使用したいと思ったのですが使用せずとも困ったことがないため用途を教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/07 08:19
2020/04/07 08:46 編集
2020/04/07 11:40