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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] expression SFINAE in variable template partial specialization became a hard error
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:frontend,
            diverges-from:gcc,
            diverges-from:msvc
      </td>
    </tr>

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

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

<pre>
    After https://github.com/llvm/llvm-project/pull/138731 being landed, clang now rejects the following program:
```cpp
template <class...>
using void_t = void;

template <class T>
T&& declval();

namespace invoke_detail {

template <typename F>
struct traits {
  template <typename... A>
 using result = decltype(declval<F>()(declval<A>()...));
};

template <typename F, typename... A>
using invoke_result_t = typename traits<F>::template result<A...>;

template <typename Void, typename F, typename... A>
inline constexpr bool is_invocable_v = false;

template <typename F, typename... A>
inline constexpr bool
 is_invocable_v<void_t<invoke_result_t<F, A...>>, F, A...> = true;

}

template <typename F, typename... A>
inline constexpr bool is_invocable_v =
    invoke_detail::is_invocable_v<void, F, A...>;

static_assert(!is_invocable_v<int>);
```

We are now treating this as a hard error:
```
<source>:12:27: error: called object type 'int' is not a function or function pointer
   12 |   using result = decltype(declval<F>()(declval<A>()...));
      | ^~~~~~~~~~~~
```

while clang-20, gcc, msvc accepted it. This change breaks folly invocability suite, which is used by large amount of currently working code. My understanding is that this code should not be considered ill-formed.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VUFv4zYT_TX0ZRBBIi3LPuigVWLgO3y9NGiPwYgaS2xoUiApZ91Df3tBKrazWW-BFq1gQDLJN_PmzXAGvVeDIapZ-YWVjyucw2hdfZ6_zmjkSKbY7apVZ_tz3RwCORhDmDwTDeN7xveDCuPcZdIeGd9rfbq8HiZnfyMZGN9Ps9aM7wuxrUQBHSkzgEbTU894C1KjGcDYN3AUAR7CSHCwWtu3eHJydnB4jA7zhm3y5SenieVNoOOkMRAw0UqN3mdZxsQTy5vZR-zJqv4lABOP6ZOJL9HGHRw8L7BnxjeMb6AnqU-oGd8yvrvCDB7JTygJlDnZV3rpKaDSwKo7dsN5ogiA_WLaBzfLAMGhCv4dAnAPkWUZNAsIljgc-VkvcURm8SDj2wtJ0SYXC9ePy811OeoSNy-xVI93tfjAmbdwh89C5z36hdW7vlfoEuCFlGiYuLlYEJHZe6L-ksQvMWUfePyQlTJaGQJpjQ_0dXLQWatB-ZdIVGKn6eWUSB5Qe_pnkd_1ETP0rRsm2qXomGg_yZQk4S1cY3-K_z4uLUK6-UYxJupf4npHj1SB8G0xLxm7G9RnuleWPmBQ8gW9JxdSwRXfGVAmpIgvFXi5yIuFXwnQUeoCwRGGWGVhVB7QA8KIrgdyzrpPXSB-i9bb2Ulaqq3gTDS8YqK5AkCi1tSD7WJ7SXoB41UkxCtQHowNgHCYjQzKGrDu9j1ZZQK5RaiCA6tagP_oUkJ6ogdWPv1xe75X621UmpbG-cDzmJFByvg6-pMElJKmQD2okMFzFFGOaAaCzhG--tRaz_CeHaVVOIOfVaBo4G1UcoyazJ566M6g0Q0EeLSzCWAPIGfnyAR9hjfrXqMM0vaUwf_PMJuenA9o-tQjYh_HsGQxngE_2ln3Se1uKU7Vk4s8tX44WHekPlv1teh3YocrqotqvanWuSiK1VivS9rJHa5lIdei5CUW1W4rDz3m2FG1kStV85yXeZlveSG2osjEoSyxrNaF7ES12yFb53REpbM4nTLrhpXyfqa6ELtiI1YaO9I-DUHOk7RMNAdnTSDTM84ZbxnnvTqRG8g_HJyNIynp_oO9mIy4WT6uXJ1GYjcPnq1zrXzwNxpBBZ2mb5u8lo8Q7yx5Hwvw5_3_fmqeQBk4oVPxNt1GxoQuKNTgJ5IKtfodU812JGNz-HhtVrPT9d-e20kfnyZ3kuhU8z8DAAD__2SMmBQ">