ブースト変換されたアダプターを使用してブースト範囲をラップしようとしていますが、これはうまくいかないようです。私は説明するために最小の例を作った。リリースモードでC++ boostの範囲:any_rangeと変換されたアダプター
std::vector<int> myInts = { 1,2,3,4,5 };
boost::any_range<double,boost::forward_traversal_tag,double> range =
myInts | boost::adaptors::transformed([](int x) { return static_cast<double>(x); });
for (double x : range)
std::cout << x << "\n";
、私のVS2015のコンパイラは、「ローカル変数または一時的のアドレスを返す」私に言って続けています。コードは実行時に正しく機能しません。デバッグモードでは問題ありません。
の代わりにdouble
に参照テンプレートパラメータを明示的に設定しても、変換されたアダプタが値によって返されるとは何とか解釈できないと思います。
any_range
で何が問題になっていますか? (ブースト1.64.0を使用)
'boost :: any_range'を' auto'に置き換えると、エラーは残っていますか?問題がany_rangeにあるかどうかを判断しようとしています。 –
'boost :: any_range'を' auto'に置き換えると、エラーはなくなります。エラーは、 'boost :: any_range'を使ってトランスフォームイテレータをタイプするときにのみ発生します。 –