2
MSCL 19を使用して次のコードをコンパイルしようとしましたが問題ありません。私はG ++ 6.2.0と打ち鳴らす3.9.0をしようとしたときしかし、私は同じ結果を生成しますusing std::enable_if_t
を追加expected nested-name-specifier class=typename
名前空間を使用し、std :: enable_if_tで動作しないディレクティブを使用する
#include<type_traits>
using namespace std;
template<class T,class=typename enable_if_t<
is_signed<T>::value&&is_integral<T>::value&&(sizeof(T)>1)>>
void f(T i) {}
int main() {
f(1);
}
のようなエラーが発生しました。
#include<type_traits>
using namespace std;
using std::enable_if_t;
template<class T,class=typename enable_if_t<
is_signed<T>::value&&is_integral<T>::value&&(sizeof(T)>1)>>
void f(T i) {
}
int main(){
f(1);
}
この問題はstd::
でenable_if_t
を付けることによって解決することができます:
#include<type_traits>
using namespace std;
template<class T,class=typename std::enable_if_t<
is_signed<T>::value&&is_integral<T>::value&&(sizeof(T)>1)>>
void f(T i) {
}
int main(){
f(1);
}
using namespace std
とusing std::enable_if_t
がstd::enable_if_t
に無効であるのはなぜ?
ここでは、「typename」は不要です。 'enable_if_t'はC++ 14であるが、' is_integral_v'はC:あなたはすでに '' –
cpplearner
FWIW、あなたは、 'is_integral_v'の代わりに 'is_integral の:: [値]を使用することができるかもしれません++ 17。 –
Eric
@Ericをenable_if_tしておりますので – ildjarn