私はstd :: optionalを使用しようとしていますが、コードのエラーが発生します。
#include <experimental/optional>
と指定しました。コンパイラオプションは-std=c++1z
,-lc++experimental
です。 の使い方C++でstd :: 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.
OS: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ブックでも、同じコンパイラを実行している)ファイル/ライブラリ/開発者/ CommandLineTools/usr/include/C++/v1/experimental/optional'があることが分かります。しかし残念なことに、エラーメッセージを表示していないので、とにかくこれを閉じる必要があります。 – Walter
@Walterエラーメッセージを追加しました。 – KiYugadgeter