Qt 5.11.3编译报错:std中无enable_if_t模板,求解决方案
解决std::enable_if_t编译错误 (macOS 10.13.6 + Qt 5.11.3 + Clang 9.1.0)
我在macOS 10.13.6系统上使用Qt 5.11.3编译项目时,碰到了std::enable_if_t相关的编译错误,先给大家说明下我的环境细节:
我的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 {}; ^
我尝试过但无效的操作
- 在源文件
*.cpp中手动添加了#include <type_traits> - 在项目
*.pro文件中添加了以下配置:CONFIG += c++17 QMAKE_CXXFLAGS += -std=c++17 # for Clang QMAKE_CXXFLAGS += -stdlib=libc++ # xcode_settings QMAKE_CXXFLAGS += -std=c++11
最终解决方法
只需要在项目*.pro文件中添加这一行配置,错误就彻底消失了:
CONFIG += c++14
这里补充下背后的原因:std::enable_if_t是C14标准才引入的模板别名,C11里只有基础的std::enable_if结构体。我之前的配置里同时混用了-std=c++17和-std=c++11,可能导致编译器最终采用了更低的C11标准;而Qt的CONFIG += c++14能更可靠地让编译器启用C14及以上的标准支持,从而正确识别std::enable_if_t。
内容的提问来源于stack exchange,提问作者Megidd
相关产品推荐
相关产品推荐

