无法在 Apple LLVM 7.3.0 上对 std::tuple 使用 "using" 声明
Cannot use "using" declaration for std::tuple on Apple LLVM 7.3.0
我试图在我的程序中使用 tuple
,但出于某种原因,我无法使用 using
声明来简化调用。例如:
#include <tuple>
using std::tuple;
...
这会在尝试编译时引发错误:
error: no member named 'tuple' in namespace 'std'
我可以将 using
声明用于其他内容(如 std::string
、std::get
等),这很好。我想我已经把它缩小到一个编译器问题,但我无法控制我要使用哪个编译器(大学服务器),而且我在网上找不到任何显示对此缺乏支持的东西 header 或任何东西。这是我的编译器信息:
$ clang++ -v
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
有什么想法吗?这是它在其他地方工作的一个例子:http://cpp.sh/5bofm
因为包含没有给出预处理器错误,元组头很可能确实存在,这不是 messed-up/out-of-date C++ 标准库安装的情况。
然而,对于 C++11 之前的所有 C++ 标准,tuple
未在 std
中定义。
使用标准安装且没有附加标志,您的 Clang 版本应该使用 C++14,但是这似乎已被维护该系统的人或某些包维护者修改。
为确保您使用的是最新的 C++ 语言标准,请将 -std=c++17
添加到编译器调用中,或者至少 -std=c++14
如果 C++17 由于某种原因太新,例如与旧编译器安装的兼容性。特别是如果您正在为一所大学编写代码 class,您可能需要澄清可以接受的 C++ 标准。
我试图在我的程序中使用 tuple
,但出于某种原因,我无法使用 using
声明来简化调用。例如:
#include <tuple>
using std::tuple;
...
这会在尝试编译时引发错误:
error: no member named 'tuple' in namespace 'std'
我可以将 using
声明用于其他内容(如 std::string
、std::get
等),这很好。我想我已经把它缩小到一个编译器问题,但我无法控制我要使用哪个编译器(大学服务器),而且我在网上找不到任何显示对此缺乏支持的东西 header 或任何东西。这是我的编译器信息:
$ clang++ -v
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
有什么想法吗?这是它在其他地方工作的一个例子:http://cpp.sh/5bofm
因为包含没有给出预处理器错误,元组头很可能确实存在,这不是 messed-up/out-of-date C++ 标准库安装的情况。
然而,对于 C++11 之前的所有 C++ 标准,tuple
未在 std
中定义。
使用标准安装且没有附加标志,您的 Clang 版本应该使用 C++14,但是这似乎已被维护该系统的人或某些包维护者修改。
为确保您使用的是最新的 C++ 语言标准,请将 -std=c++17
添加到编译器调用中,或者至少 -std=c++14
如果 C++17 由于某种原因太新,例如与旧编译器安装的兼容性。特别是如果您正在为一所大学编写代码 class,您可能需要澄清可以接受的 C++ 标准。