我收到一个错误,提示std::enable_if_t
没有命名模板类型。有趣的是,它包含在文件顶部的行#include <type_traits>
中。但是查看其他一些标准标头,在另一个未定义enable_if_t
的目录中还有一个名为type_traits的文件。 gcc如何决定要使用哪些文件?如何更改?
我要使用的文件的路径是:
.../arm-none-eabi/include/c++/7.3.1/type_traits
我不知道gcc使用了什么文件,但是这些文件没有应该解决我的问题的定义:
.../arm-none-eabi/include/c++/7.3.1/bits/cpp_type_traits.h
.../arm-none-eabi/include/c++/7.3.1/ext/type_traits.h
.../arm-none-eabi/include/c++/7.3.1/experimental/type_traits
.../arm-none-eabi/include/c++/7.3.1/tr2/type_traits
.../arm-none-eabi/include/c++/7.3.1/tr1/type_traits
答案 0 :(得分:1)
根据您的标签,您正在使用-std=c++11
进行编译。 C ++ 11标准库
没有定义std::enable_if_t
。 C ++ 14定义了它和标准库
标头仅在您使用-std=c++14
进行编译时才会公开。
在C ++ 11中,写std::enable_if<B,T>::type
而不是std::enable_if_t<B,T>
。 C ++ 14
定义:
template< bool B, class T = void >
using enable_if_t = typename enable_if<B,T>::type;
C ++ 11没有。
请参见documentation of std::enable_if
您不能仅通过在其中找到 X 的声明或定义来推断
一些标准的标头,该声明或定义将可见
给定编译选项的编译器,因为头文件将
进行预处理,通常取决于
编译选项,包括-std
选项,也许还有配置
您的实施选项。