friend void swap(X& lhs, X& rhs)
{
    if (&lhs == &rhs)
        return;
    std::scoped_lock guard(lhs.m, rhs.m);
    swap(lhs.some_detail, rhs.some_detail);
}

이런 코드 있으면 scoped_lock 덕분에 락 풀릴 때 걸때의 역순으로 해서 데드락 방지하잖아요

그런데 다른 곳에서도 동시에 swap이 실행되고 마침 거기서는 lhs rhs가 반대였다고 치면 그 문제는 어떻게 되나요? 그러면 데드락 가능할 것 같은데요