【发布时间】:2017-10-28 06:38:39
【问题描述】:
我正在尝试使用 std::optional 但我的代码引发错误。
我指定了#include <experimental/optional>,编译器选项为-std=c++1z、-lc++experimental。
std::experimental::optional怎么用?
以下是代码:
#include <experimental/optional>
#include <iostream>
std::experimental::optional<int> my_div(int x, int y) {
if (y != 0) {
int b = x / y;
return {b};
}
else {
return {};
}
}
int main() {
auto res = my_div(6, 2);
if (res) {
int p = res.value();
std::cout << p << std::endl;
}
}
错误信息:
optional.cpp:17:21: error: call to unavailable member function 'value':
int p = res.value();
~~~~^~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/experimental/optional:525:17: note: candidate function has been explicitly made unavailable
value_type& value()
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/experimental/optional:517:33: note: candidate function has been explicitly made unavailable
constexpr value_type const& value() const
^
1 error generated.
操作系统:macOS 10.12.5
编译器版本:
Apple LLVM version 8.1.0 (clang-802.0.42)
Target: x86_64-apple-darwin16.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
【问题讨论】:
-
通过 gcc 6.3.1 编译没有问题。您的编译器很可能对 C++1z 的支持水平不足。
-
对不起,我作为骗子的结束还为时过早。我发现(至少在我的 MAC 书上,也运行相同的编译器)有一个文件
/Library/Developer/CommandLineTools/usr/include/c++/v1/experimental/optional,所以这应该可以工作......但是,不幸的是,你没有向我们显示错误消息,所以我们可能无论如何都必须关闭它。 -
@Walter 我添加了错误消息。
标签: c++ c++17 stdoptional