错误:名称空间“ std”中没有名为“ is_same_v”的模板;你是说'is_same'吗?

时间:2020-10-09 19:42:55

标签: c++ xcode qt std clang++

这是another question的后续问题,已经解决。但是然后,我收到此错误:

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 {};
                                                            ^

基于previous answer

...它是在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

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

代码

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

template<class T, class O = T>
using IteratorOnly = std::enable_if_t<
    !std::is_same_v<typename std::iterator_traits<T>::value_type, void>, O
>;

观察

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

  • enable_if_t很好,is_same_v不好

错误:名称空间“ std”中没有名为“ is_same_v”的模板;你是说'is_same'吗?

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

  • enable_if_tis_same_v都不好

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

错误:名称空间“ std”中没有名为“ is_same_v”的模板;你是说'is_same'吗?

为什么?

1 个答案:

答案 0 :(得分:0)

该工具链能够使用C ++ 17。因此,最终将std::is_same_v替换为this approachstd::is_same ...