Jonathan,
the ranges header contains code like:
inline constexpr __adaptor::_RangeAdaptorClosure all
= [] <viewable_range _Range> (_Range&& __r)
{
if constexpr (view<decay_t<_Range>>)
return std::forward<_Range>(__r);
else if constexpr (requires { ref_view{std::forward<_Range>(__r)}; })
return ref_view{std::forward<_Range>(__r)};
else
return subrange{std::forward<_Range>(__r)};
};
(line 1236)
When you strip away all the templateyness, you have:
inline constexpr auto all = [] () {};
That's an ODR violation -- the initializers in different TUs are not the
same!
As you can guess, I can't turn this into a header unit (well, I can, but
merging duplicates complains at you)
nathan
--
Nathan Sidwell