错误:命名空间“std”中没有名为“enable_if_t”的模板;你是说'enable_if'吗?

Posted

技术标签:

【中文标题】错误:命名空间“std”中没有名为“enable_if_t”的模板;你是说\'enable_if\'吗?【英文标题】:error: no template named 'enable_if_t' in namespace 'std'; did you mean 'enable_if'?错误:命名空间“std”中没有名为“enable_if_t”的模板;你是说'enable_if'吗? 【发布时间】:2021-01-24 15:09:36 【问题描述】:

我在 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

【问题讨论】:

看来 c++17 标志可能无法使用。这有帮助吗? ***.com/questions/19398438/… @MorningDewd QMAKE_CXXFLAGS += -std=c++11 没用 :( 【参考方案1】:

模板别名enable_if_t在C++11中不可用;它是在 C++14 中添加的,大多数其他类型特征 *_t 版本也是如此(C++17 将 *_v 版本添加为 inline constexpr 变量)。

【讨论】:

以上是关于错误:命名空间“std”中没有名为“enable_if_t”的模板;你是说'enable_if'吗?的主要内容,如果未能解决你的问题,请参考以下文章

命名空间“std”中没有名为“shared_ptr”的类型

命名空间“std”中没有名为“size”的成员

命名空间“std”中没有名为“make_unique”的成员

命名空间“std”中没有名为“hardware_constructive_interference_size”的成员

Vscode/ESP-IDF 错误命名空间“std”没有成员“array”无论如何都会编译

如何在 Xcode 中获得 std::optional 支持?