这是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
版本作为内联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_t
和is_same_v
都不好错误:名称空间“ std”中没有名为“ enable_if_t”的模板;你是说'enable_if'吗?
错误:名称空间“ std”中没有名为“ is_same_v”的模板;你是说'is_same'吗?
为什么?