<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylU8GO2yAQ_Rr7gtZy7NhJDj5sd7tqpa5SbaNKPQ4wjmkxWICbTb6-A05XTdVbpbHNwMzjvQfmVp67B4cQlDkyMCxry1Erl9X3FPuJUnZSYYhLOE7hHAsODlTwcWkCByMGdDQSP5hGkJ4Fy8KArLda21OEFXaclKYtLIE4Z90C-fzl60Pcp3zMyntCu0ZKl7KHat22VMIEGGMDA0IUEDCyAefgzGxP6MYHMIF5dUFW_hNueR-I1eQs1zgyrdAvNCJXKhzAJ11RVj8bkdiqZMh-esReGRWniiFZMihBnS6CkFwRDfyDFQePklF_xL71qGCHQflrHRqya54Yx2jT4q-KXVQhCKNgRyGy6kloeLPxStvOZIehcu9n9MWtTGrPmndHK7nVgeErjJPGrHnMqu0QwuSj69UTxbWksO5I2YUe7D-Lwwa_tVm1i7Yzh2SZnAUmMWk72lhG2wMoQ1LYZAOaoECzXr0yfmZ-QkGpukRZqS0SGKlouQQ9nW2cjhqXQzB0Z9KtKnLZ1XJX7yCHmWS67gP5p-XdSz473f1Fn1pnXpAxlGj98_fnjih_RxEoXfyhQVM3bZ0PHefb1boBvuNS9KsNr9umXfWyacumRVi1uQaO2ndkYFZVBk-LZhqTgfn_M1BdVVYUZV3uqtWqLeRmLXdyK9fQk3ApsnWJIyhdRJx4MrnrEiSfj54WtfJk09sieK-OBjERJoZBBZ2S508fX2iCvU_Xaj9dDWY9Yfubf5Ii_ot5Ytolmr8Alp9bfA>53563</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] Empty Op traits fails compilation on MSVC
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          Harald-R
      </td>
    </tr>
</table>

<pre>
    Creating an `mlir::Op` with an empty `Traits` parameter pack leads to the following compilation error with MSVC:
```
error C2466: cannot allocate an array of constant size 0
```

The problem lies with the `hasTrait` function in `OpDefinition.h` which tries to create an array based on the parameter pack. This array ends up being empty in this case. gcc/clang compiles without any issues.

This [godbolt example](https://godbolt.org/z/efPcT7eY6) can reproduce the issue and contains a potential fix by specializing the implementation for the case with no traits.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxtUtFunDAQ_Bp4sYIIcHfhgYc016iVGl2VniL1cbGXw62xkW2aXL6-u-YaNVUl38Hi8ezMeHunzt2dR4jangRYkW3LyWif1be0DjOV4lnHkbdwmuOZAUcPOgbemsHDhBE9vcmfwiCoIKITcUQxOGPcM9NKN83aUAtHJN47v1I-fHu64z7lPitvie2yUrnC7qpmuyWIkGCtiwKIUUJEVgPew1m4gdhtiGCjCPoVRflfuvX_SKpm73qDkzAawyqDtRJwhJB8sa1hsTKp1SmQw7zHQVvNn4oxRTJqSSc9k5BdyQH-paqHgErQeeZ-n1EhjqMOFxxaimuZRY8c05qv5lOEkMRRiJOUWXUvDbzFeJHtForDEjyEBUPx3iYdzzYfTk71zkSBLzDNBrPNPqtuxhjnwKlX97QukML5E1Wv9MPhqzzu8Ps2q1qOXXikyNQiMZlJ7aix4tgjaEtWxOwi2qjBiEG_iP4swoySSv3KttIxFjARaB2Cge6WP7PH9RIszUyaqiJXXa3auoU86miwIyMPXz4_knrxMQV0mC9QMYA24d100eKpyhdvun-cUpelLwhMhTG__jyuyN0PlJHKNUp62dSbbZ2P3VDuNvXQ1Ncgm7Yqd32v2t0wKIBm06oKcgM9msASs6qy-LzGQ--kNtddVVa0yrpsq-vrbaF2jWrVjWpgIIdKZk2JE1koWAdfQe67JKlfToE2jQ6Ux9smhKBPFlMizA8LTYHvPtF4GXX1mKfeXdL-G6xCRjo">