这是对已经解决的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 {};
^
...它是在C++14中添加的,与大多数其他类型的特性
*_t
版本一样.C++17添加了*_v
版本作为内联常数变量..。
因此,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
>;
观察
当我在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’吗?
为什么?
发布于 2020-10-23 15:42:12
工具链不能实现C++17,因此,最终用this approach代替了std::is_same
。
https://stackoverflow.com/questions/64286346
复制相似问题