我正在尝试在 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));
}
任何想法如何解决这个问题?