c++ - 错误:命名空间“std”中没有名为“enable_if_t”的模板;你是说'enable_if'吗?
问题描述
我在 macOS 10.13.6 上使用 Qt 5.11.3 进行编译。Qt使用的clang版本是:
$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -v
Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
但我收到此错误:
error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?
using FloatingOnly = std::enable_if_t<std::is_floating_point<T>::value, O>;
~~~~~^~~~~~~~~~~
enable_if
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:423:63: note: 'enable_if' declared here
template <bool, class _Tp = void> struct _LIBCPP_TEMPLATE_VIS enable_if {};
^
试过了
到目前为止,我已经完成了这些,但没有任何效果:
// On source *.cpp file
#include <type_traits>
# On project *.pro file
CONFIG += c++17
QMAKE_CXXFLAGS += -std=c++17 # for Clang
QMAKE_CXXFLAGS += -stdlib=libc++ # xcode_settings
QMAKE_CXXFLAGS += -std=c++11
错误已解决
我刚刚使用了这些,错误得到了解决:
CONFIG += c++14
CONFIG += c++17
解决方案
模板别名enable_if_t
在 C++11 中不可用;它是在 C++14 中添加的,大多数其他类型特征*_t
版本也是如此(C++17 添加*_v
版本作为inline constexpr
变量)。
推荐阅读
- javascript - 鼠标事件[X 和 Y 坐标]
- sqlite - Sqlite 层次结构动态
- android - 底部像素溢出的 RenderFlex
- typescript - 如何将打字稿接口声明为类属性
- android - 关机时崩溃(可能是finishActivityAffinity)
- jenkins - Jenkins-X 和 Jenkins Helm 图表是否相同?
- sql - SQL Server:存储过程中的查询优化
- angular - 通过角度解析字符串编码
- mysql - mysql中是否有按特定行排序的功能?
- php - 我的 Nginx 安全链接不起作用,显示安全 URL 但视频不播放