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

    <tr>
        <th>Summary</th>
        <td>
            __declspec properties outside of class members do not work as expected
        </td>
    </tr>

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

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

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

<pre>
    As shown in the example below, the properties return unexpected results when used outside of class members.
Although, according to [Microsoft's specification](https://learn.microsoft.com/en-us/cpp/cpp/property-cpp?view=msvc-170), they shouldnt be allowed outside of members and should cause [error C3065](https://learn.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c3065?view=msvc-170)

https://godbolt.org/z/jqe59vW85



```cpp
#include <cstdio>

struct Color {
    float r, g, b, a;
};

struct Test {
    Color get_value() {
        return Color{1.0f, 0.5f, 0.5f, 1.0f};
    }
    __declspec(property(get=get_value)) Color value;
};

Color get_value() {
    return Color{1.0f, 0.5f, 0.5f, 1.0f};
}
__declspec(property(get=get_value)) Color value;

int main() {
    Test t;

    auto color2 = t.value;
        printf("%f, %f, %f, %f\n", color2.r, color2.g, color2.b, color2.a);

    // returns empty ?
    auto color3 = value;
        printf("%f, %f, %f, %f\n", color3.r, color3.g, color3.b, color3.a);

    auto color4 = get_value();
        printf("%f, %f, %f, %f\n", color4.r, color4.g, color4.b, color4.a);

    return 0;
}
```

```
1.000000, 0.500000, 0.500000, 1.000000
0.000000, 0.000000, 0.000000, 0.000000
1.000000, 0.500000, 0.500000, 1.000000
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyslUFv8ygTgH8NuYxiEbDr-OBDm3y5fbeV9lhhPHZ4i8ELOHm7v34FcVOnTbWrqlaEh2FmeAZPGOG96g1iTYonUuxXYgpH6-oX26IRA7448bJqbPtaP3rwR3s2oAyEIwL-FsOoERrU9kzYLilHZ0d0QaEHh2FyBiaDv0eUAVtw6CcdPJyPaGDy2IKdglctgu1AauE9DDg06HxG6J7Qx0cdjnbqjzG6kNK6VpkeggVSPP1fSWe97QJhpQc_olSdkiIoa0ixJ2x7DGH0hD8SdiDsoFE4kw1vTpm0A2EHNOvJE3aQ43gd5xRe13HKDyeFZ8L3gz_J9aakhFVzrq_xOCbdmgANgtDanm8zmnMBYdrZFKSYPEZ6dM462HH6UHyXNoVYD-i96DGp7TAqjW6dVvyafdKtZdrwblLpwC_jLUtv28bqkFnXE3b4m7DDr7-wqE5_boul0834QC-_SHrRMK6M1FOLQPhO-tAqS_j_lk4-uEkG2FltHZDy6aIFAOi0FQFcPPc-Dk2qB8JnE1Lu3-VlqD_Qh9tIl-A9hueT0BMStiWsujWJz1y6yZqUT5uMdnFLmhU376RfbB5d4_w6eX5uUepYm4Rt3-qKsG2PgfD9AqOKGBe4i-br3P5DCt_Ev6L_AHYalQkwCGXuMaZvEz44xAUxBQsyxmRA-B5C9jF0NTplQpeiMsIuydx9FzuTTHZzwMwt5H4hNwtZxLw-c13-DPPZesBhDK9A-OEeOU_kP8bNF9x8wc0X3Pwr7neqPFF9qJyf4MsXfPmCL1_w5V_xzcVKP5fh9Ra5e7VcppuMpmeu67vy1SZ50BuPf5G_uccVctXWvK14JVZYb8pNXpQVzenqWOcVFlg0ZVc2G952XObVA6uaLu8k5UXFVqpmlOW0oJtNUZSMZm3Lmk0jCoqi6LbbDckpDkLpTOvTEC_nlfJ-wrqiZc5XWjSoferpjBk8Q1qMH63Yr1wdfdbN1HuSU6188O9Rggoa6_crYNnSv2rX0FowNsDZuhcQHt46_mpyuv7QTVQ4Ts3c0OKm82s9OvsLZSDskFBjQ0up_BMAAP__Kvd4zg">