【发布时间】:2019-04-05 16:10:27
【问题描述】:
使用 GCC_VERSION gcc-6.2.0 出现以下错误,但使用 gcc-4.3.0 的代码相同:
char_traits.h:27:8: 错误: enable_if 不是类模板
struct enable_if<true, T> { typedef T type;};
char_traits.h:27:25: 错误:用 1 个模板参数重新声明
struct enable_if<true, T> { typedef T type; };
char_traits.h:24:8: 注意:上一个 声明模板 struct enable_if used 2 模板参数
struct enable_if {};char_traits.h:32:22: 错误:enable_if 之前的预期嵌套名称说明符
typedef typename enable_if<sizeof (T) == sizeof (char)>::type eif;
template<bool B, class T = void>
struct enable_if {};
template<class T>
struct enable_if<true, T> { typedef T type; };
template<typename T>
struct is_char
{
typedef typename enable_if<sizeof (T) == sizeof (char)>::type eif;
};
您能帮忙解决这些错误吗?
【问题讨论】:
-
您可以用标准的 std::enable_if<:is_same char>::value>::type 替换您的条件,如果条件失败,则返回的类型必须是 void 类型.:
-
gcc 4.3.0 早于 C++11。 gcc 6.2.0 大约可以追溯到 2016 年。2011 年的 C++ 标准引入了
std::enable_if。您的代码声明了名称enable_if并且可能在文件范围内也具有using namespace std有效。这将解释错误。将您的 enable_if 重命名为不冲突的其他名称,或从您的所有代码中删除using namespace std。最好两者都有。
标签: c++