<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/63753>63753</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            `<ratio>`: The `std::ratio` meta arithmetic can accept non-`std::ratio`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          hewillk
      </td>
    </tr>
</table>

<pre>
    [[ratio.general]](https://eel.is/c++draft/ratio.general): "If a template parameter is named R1 or R2, and the template argument is not a specialization of the ratio template, the program is ill-formed."

Only MSVC-STL triggers the static assertion for the following test:

```cpp
#include <ratio>

struct Ratio { constexpr static double num = 0, den = 1; };
static_assert(std::ratio_equal<Ratio, std::ratio<0, 5>>());

```
https://godbolt.org/z/MhazY5ecn
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsU11r6zgQ_TXjlyFBluzEefBDnDSwsGWhLQv7VGRrbGtXlrySfHvbX3-R095-UBAJ0syZc86MR4agB0tUQ9lAec7kEkfn65GetDH_Za1Tz9dQ42XUbjuQJS8NlOd0eDXGOAcQR-AX4Bcis9UB-KUD3gBvlJd9BH75jOUHEEcEzv_oUWKkaTYyEs7Sy4kiedQBrZxI4V2OzuMdB35CaRXGkd7zpR-WiWxc011EiWGmTkujXxKdRdevgJX8NyyVSq-zd4OXUwJrYza98xOpLXAO7AzseP39y5pnvL3_-7S5f_gTo9fDQD6s-BBl1B3KEMivbL3za6B3xrgnbQeMFGJqzYeCsGPX083z6wsX2nZmUYQgTqtWEDcfMSH6pYt4t9qAfYOdsyHSz9m_iVBuaQ2hXSYEcUaWPCqy6yUH0SDszyCat3IJ83gVDrwKUSWR4rhyP9L_izQgTitdKvQ5DuK0li-TSHEDvErjTBNtvvV5vX7-SganWmfi1vkB-OUF-OV2lC__lNTZTNVCHcRBZlTnu6qq8r0oq2ys-1a1hWJM5FK0-6o6sELxXKqCFYIK3ma65owLtmdVnpdlWW0lU1VREbFW8V7ueigYTVKbrTE_psSd6RAWqndiX4rMyJZMeNsCX6ekTbsMAQpmdIjhHRZ1NFQnbx_mlW5HfBgJYce-tGzHcKIoUXodx4nSxDppUXYdzRGts5vvMNniTf2lcTqOS7vt3AT8kvS8_m1m7_6lLm3a6ilt4GrrVwAAAP__crAyiw">