首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:命名空间‘std’中没有名为'is_same_v‘的模板;您的意思是'is_same’吗?

错误:命名空间‘std’中没有名为'is_same_v‘的模板;您的意思是'is_same’吗?
EN

Stack Overflow用户
提问于 2020-10-09 19:42:55
回答 1查看 3.3K关注 0票数 4

这是对已经解决的another question的后续。但是,我收到了这个错误:

代码语言:javascript
运行
复制
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版本作为内联常数变量..。

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

代码语言:javascript
运行
复制
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++版本是:

代码语言:javascript
运行
复制
$ /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版本,这些版本来自有许多贡献者的存储库:

代码语言:javascript
运行
复制
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
>;

观察

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

  • enable_if_t很好,is_same_v很坏

错误:命名空间‘std’中没有名为'is_same_v‘的模板;您的意思是'is_same’吗?

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

  • enable_if_tis_same_v都是坏的

错误:命名空间‘std’中没有名为'enable_if_t‘的模板;您的意思是'enable_if’吗?错误:命名空间‘std’中没有名为'is_same_v‘的模板;您的意思是'is_same’吗?

为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 15:42:12

工具链不能实现C++17,因此,最终用this approach代替了std::is_same

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64286346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档