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 回答