Boost.Rangeを使用して、いくつかのデータとこのデータのコンテナークラスを渡します。データは別のスレッドにロードされ、場合によってはまだ準備ができていない可能性があります。この場合、コンテナはデフォルトのiterator_rangeで初期化されるため、単一のイテレータが含まれます。データコンテナの割り当てとコピーを行っています(したがって、iterator_ranges)。ただし、iterator_rangeコピーコンストラクターはbegin()とend()を呼び出し、オリジナルが特異である場合にアサートします。そのため、空のデータコンテナをコピーすることはできません。
この制限を回避する方法はありますか?
この制限が実装されているのはなぜですか?以下は問題なく動作しますが、範囲は同じように動作するべきではありませんか?
typedef std::vector<int>::iterator iterator;
iterator it; // Singular
iterator it2 = it; // Works
boost::iterator_range<iterator> range; // Singular
boost::iterator_range<iterator> range2 = range; // Asserts in debug, but why?