0

boost::rangeの周りにLINQラッパーを実装することを少し実験しています。

しかし、「コンパイラで内部エラーが発生しました」というメッセージが表示される場所を選択してみました。

template<typename R>
class linq_range
{
    R range;
public:

    linq_range(R range)
        : range(std::move(range))
    {
    }

    template<typename F>
    auto select(const F& f) const -> linq_range<decltype(std::declval<R>() | boost::adaptors::transformed(f))>
    {
        return linq_range<decltype(std::declval<R>() | boost::adaptors::transformed(f))>(this->range | boost::adaptors::transformed(f));
    }
};

template<typename R>
auto from(R& r) -> linq_range<boost::iterator_range<decltype(std::begin(r))>>
{
    return from(std::begin(r), std::end(r));
}

template<typename I>
linq_range<boost::iterator_range<I>> from(I b, I e)
{
    return linq_range<boost::iterator_range<I>>(boost::iterator_range<I>(b, e));
}

この問題を回避する方法はありますか?

4

1 に答える 1

1

私はそれを次のように定義することで解決しました:

BOOST_RESULT_OF_USE_DECLTYPE
于 2012-07-19T09:24:51.593 に答える