【问题标题】:error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?错误:命名空间“std”中没有名为“is_same_v”的模板;你是说'is_same'吗?
【发布时间】:2021-01-24 21:46:12
【问题描述】:

这是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'吗?

为什么?

【问题讨论】:

  • C++14 和 C++17 标志是互斥的。您只能使用 single 标准版本进行编译。只需删除对 C++14 的所有引用。
  • @StoryTeller-UnslanderMonica 当我删除对 C++14 的所有引用并仅保留 C++17 时,我收到未知的 enable_if_t 错误!
  • 听起来像是标准库/编译器的错误安装。 _t 类型特征在 C++14 中可用。这意味着它们在 C++17 中也可用,因此指定不应使它们停止工作。
  • 我认为 xcode 9 没有完整的 c++17 支持,您使用旧版本有什么原因吗?

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


【解决方案1】:

工具链支持 C++17。因此,最终将std::is_same_v 替换为std::is_samethis approach ...

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2021-07-18
    • 1970-01-01
    • 2012-09-29
    • 2017-12-08
    • 1970-01-01
    • 2021-09-04
    • 2021-03-04
    • 2014-12-21
    相关资源
    最近更新 更多