错误:命名空间“std”中没有名为“is_same_v”的模板;您指的是“is_same”吗?

use*_*291 8 c++ xcode qt std clang++

这是另一个已经解决的问题的后续。但随后,我收到此错误:

error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
    !std::is_same_v<typename std::iterator_traits<T>::value_type, void>, O
     ~~~~~^~~~~~~~~
          is_same
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:831:61: note: 'is_same' declared here
template <class _Tp, class _Up> struct _LIBCPP_TEMPLATE_VIS is_same           : public false_type {};
                                                            ^
Run Code Online (Sandbox Code Playgroud)

根据之前的回答

...它是在 C++14 中添加的,就像大多数其他类型特征*_t版本一样...C++17 添加了*_v作为内联 constexpr 变量的版本...

所以,is_same_v是由C++17添加的。但我已经通过以下方式将 C++14 和 C++17 添加到 QMake:

CONFIG += c++14
CONFIG += c++17
QMAKE_CXXFLAGS += -std=c++14
QMAKE_CXXFLAGS += -std=c++17
Run Code Online (Sandbox Code Playgroud)

XCode (Clang) 是否可能缺少一些 C++17 功能?我的 Xcode 版本是 9.4.1,我的 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
Run Code Online (Sandbox Code Playgroud)

代码

代码中有 C++14*_t 类型特征版本和 C++17*_v版本,该代码来自具有许多贡献者的存储库:

error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
    !std::is_same_v<typename std::iterator_traits<T>::value_type, void>, O
     ~~~~~^~~~~~~~~
          is_same
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:831:61: note: 'is_same' declared here
template <class _Tp, class _Up> struct _LIBCPP_TEMPLATE_VIS is_same           : public false_type {};
                                                            ^
Run Code Online (Sandbox Code Playgroud)

观察

当我CONFIG += c++14在 QMake 项目文件中使用时,我只收到此错误:

  • enable_if_t是好的还是is_same_v坏的

错误:命名空间“std”中没有名为“is_same_v”的模板;您指的是“is_same”吗?

当我CONFIG += c++17在 QMake 项目文件中使用时,我收到以下两个错误:

  • enable_if_t都不is_same_v

错误:命名空间“std”中没有名为“enable_if_t”的模板;您的意思是“enable_if”吗?

错误:命名空间“std”中没有名为“is_same_v”的模板;您指的是“is_same”吗?

为什么?

use*_*291 0

该工具链支持 C++17。因此,最终,替换std::is_same_v这种std::is_same方法......