gpt4 book ai didi

c++ - 使用命名空间和使用指令不适用于 std::enable_if_t

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:57 26 4
gpt4 key购买 nike

当我尝试使用 MSCL 19 编译以下代码时,没问题。但是,当我尝试 g++ 6.2.0 和 clang 3.9.0 时,出现了类似 expected nested-name-specifier class=typename

的错误
#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);
}

添加 using std::enable_if_t 将产生相同的结果。

#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);
}

这个问题可以通过在 enable_if_t 前加上 std:: 来解决:

#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 stdusing std::enable_if_tstd::enable_if_t 无效?

最佳答案

它试图告诉您的是,当它看到 typename 时,它希望接下来有一个嵌套类型说明符。并且 enable_if_t 的使用没有任何嵌套(没有 ::)。删除 typename 使其与 gcc 一起工作。

关于c++ - 使用命名空间和使用指令不适用于 std::enable_if_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com