Здравствуйте, B0FEE664, Вы писали:
В принципе, все верно, только в перdой перегрузке std::is_rvalue_reference_v<Collection&> всегда будет вычисляться в false (с логическим отрицанием соответственно всегда будет true), поэтому SFINAE здесь просто не дает никакого эффекта и можно упростить до:
template<typename Collection>
void operator|(const Collection& col, int)
{
cout<<"lvalue\n";
}
template<typename Collection>
std::enable_if_t<std::is_rvalue_reference_v<Collection&&>>
operator|(Collection&& col, int)
{
cout<<"rvalue\n";
}