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

    <tr>
        <th>Summary</th>
        <td>
            Template deduction guides don't work with Objective-C declared properties
        </td>
    </tr>

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

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

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

<pre>
    Sample code that doesn't work:
```
#include <stddef.h>

#include <iterator>

template <typename T>
class Span {
 public:
 Span(T*) {}
};

template <typename It,
          typename T = std::remove_reference_t<std::iter_reference_t<It>>>
Span(It) -> Span<T>;


@interface MyInterface
  @property char* data;
@end

void F(MyInterface* interface) {
    Span s(interface.data);  // doesn't work
    Span<char> s2(interface.data);  // works
    Span<char> s3([interface data]);  // works
}
```

This produces:
```
<source>:21:10: error: no viable constructor or deduction guide for deduction of template arguments of 'Span'
   21 |     Span s(interface.data);  // doesn't work
      | ^
<source>:13:1: note: candidate template ignored: couldn't infer template argument 'It'
   13 | Span(It) -> Span<T>;
      | ^
<source>:6:7: note: candidate template ignored: could not match 'Span<T>' against '<pseudo-object type>'
    6 | class Span {
      | ^
<source>:8:3: note: candidate template ignored: could not match 'T *' against '<pseudo-object type>'
    8 |   Span(T*) {}
      | ^
```

Godbolt: https://godbolt.org/z/3Y7v1zW7K
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyklUFv6zYMgH8NcyEa2FIcxQcf3KQZimHY4RUYdnqQLTrW5liGJKdof_0g2U3aLF338ALDjkWK_EiRtHROH3qiArJ7yHYLOfrW2OKVvGzGvvba9IvKqJfimzwOHWFtFKFvpUdlyPXAhMdnY_8GXkKyg6SEdTJf0yvjuq-7UREC3zqvFDXLFvjDLL6hpD1Z6Y29UvJ0HDrpo4p_GaiXR8Kns1LdSefw2yB7BHE_reEwVp2uz2xRDGzzBKwElkdFsZudiB3w-y8dPnpg29na-XfBQeA7dF4Fl7y0dDQn-m6pIUt9Td_9lINJGuK8kj36EM90RR8zcPCa4x3whykEvo2Bf-Sd76tE955sI2vC314e3_6_McMqGawZyPoXrFtpgZWopJcXY6uEevXe5MlohXtgm_fmWIn68pK_SzridAwO2Oassow-WA78HhHYHtj-uoI-7Aa-jXT8AR37ylDY7j7fz4FtILu_pCWayHafW7lUxVU1x_tTqx0O1qixJvdp4fOtM6OtKR5UyVLgZZoAL5GsDcVdYm_wpGUVu6p33o61NxaNRUVqjK2Hh1ErwubDmmnwXJrSHsYj9d6FVWBiqhdxzgVLEcQWf_5MMNqB7OFmdCkPtykmT-FZy15pFRDPrPrQG0sqSs3YqcmN7huy_w4oBBOq_hJKyiPC_-uIr5HXwEvxg8RBF4_S1-0517NfJlAepO5dBAe-HRyNytyZ6i-qfRwQk9oFbx3xbo6tL-E3wEv-U_BPGGfgj2Nv5oL6j1F6i_9WH_1iVGU6Hwhb74fYSrEKD5NgaewB2P4V2J7_KU7p6x_i14UquMp5LhdUpOt8k67zVZIt2oKyqskqEqxhlVB5tklXda4S1Yi83mSpWuiCJYynCVulYsVZthR5zldVI9S6WVciW4fBd5S6W3bd6Rh8L7RzIxUiSUSy6GRFnYufScZ6esYoBMbCV9MWYc9dNR4crJJOO-8uVrz2HRVPb-dy1dwOlbk0HD5r3-LvMf36RHdbVFR30pLCeWprcovRdsVVxrRvx2pZmyOwffA8P-4Ga4ItYPvI64DtYzz_BAAA__8p6lPv">