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

    <tr>
        <th>Summary</th>
        <td>
            clang-tidy: cppcoreguidelines-prefer-member-initializer doesn't understand structured binding
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

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

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

<pre>
    Consider this code:

```c++
#include <tuple>
class C
{
 private:
    int m_data1;
    double m_data2;

  public:
 C(const float f)
    {
        auto [i, d] = Create(f);
 m_data1     = i;
//      ~~~~~~~~~~~~~~~~
//      'm_data1' should be initialized in a member initializer of the constructor (fix available) (clang-tidy cppcoreguidelines-prefer-member-initializer)
        m_data2 = d;
//      ~~~~~~~~~~~~~~~~
//      'm_data2' should be initialized in a member initializer of the constructor (fix available) (clang-tidy cppcoreguidelines-prefer-member-initializer)
    }

    static auto Create(const float f) -> std::tuple<int, double>
    {
        return {static_cast<int>(f), static_cast<double>(f)};
    }
};

auto main() -> int
{
    const float MAGIC = 3.1415F;
    C c(MAGIC);
 return 0;
}
```

clang tidy flags those members as being able to be done through the initializer list. however that is not true. when applying the quick fix, it will produce something like this:

```c++
    C(const float f) : m_data1(i), m_data2(d)
 {
        auto [i, d] = Create(f);
    }
```

Which of course is invalid.

current version:

```text
Ubuntu LLVM version 19.0.0
  Optimized build.
```

from

```text
Ubuntu clang version 19.0.0 (++20240222031214+307409a8872f-1~exp1~20240222151237.1514)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVk2P2zYT_jX0ZWBDouyVdPBh146DAAney9v2GFDkSJqGJlV-OE4P-e0FZdmyt1sgRS4lDBngfD4zz4wkvKfOIG7Z5oVt9gsRQ2_d9iC0tO_RLRqrvm131nhS6CD05EFahax4ZtmeZdfnU3b5ScZf0u9yywsyUkeFwIpdiINGVry7yKQW3sNuUiwnCxgcnUSY3QMAkAlw_KxEEDkrXuZ7ZWOjcRLxm-iqMMRGk5w97RivpDU-QKutCNAyXs_O5hSmI2KwwDYvxPgOFNvsgRV72DlM6fFqtL5lM6U3GiY1mrPhB8YPF5ffX52_azBeXpHyEnxvo1bQIJChQELTn6iADAg44rFBd3fvwLYQeoQRoosyWAcpTzqDOAnSotHIeJ3upBamWwZS30AOg7QOu0gKNRn0y8Fhi255CbC8C_BQrnSmwo-A1c8C5v9xwKzcP9ILwAcRSF6IcuPFa4bBkhXvwAeViFg8T0OwIxNGXo0Uvg3Fm0R0GKIz6f4S8LMUPkwuindXKvIdPIpn15NGuX-YnhnQneDyHBEdBRnGqxuEFO7VsALAPdxPz-8_7EY2FKt8nW8OD_F2IBmvRp2H0ZngZXMOt8SuS-U-t7GVMLay1aLzEHrrcaKHB-GhQTIdpO5DsIlLyhqE0Dsbu35kzD2JNPmwgt5-xdO430QA8mBsgOAiruBrjwbEMOhvyWuy_iOS_AItnVPNKcBX0hoGZ1WUCN4eMfRJVdMXHPflD63KsUJv0YcVt-3CeEVTq28zU6mZpT-3wh4o8Vblf-tJ9mnopI3OYyoTmZPQpFYPDYrOoQlwQufJmn9CH_A88emXJpoQ4ePHXz9djSCvV9kqu2b2vyHQcVwFTSR9C_dWkq2zxx-LdyHSY0AYCZ-6wjO-zjjnWZHzfM34S5GV66wWVVXydpl_x_OQf78q5ZucF-Uq3yTNqRv_F67DkLp3rp4-P62Xg1xqMvG87EycVHqHQsHRKtRJcbCezhfRB-OD0BrVnlwSMX6I3jF-aMi8ArZQ20LVRS0WuM3LrKqLqt7Ui37brLOmbVVZl3XJmzYvN62SsmyxFCikrBe0nQA8ZXW-2dSr9kmu87wo11iVfIMVW2d4FKRXWp-OK-u6BXkfcVvxuswWWjSo_fjdwPm8YRnn6TvCbZPRsomdZ-ssTZmf3QQKGrd3NsXzv1nMoCx6w3gZIBqFzgdhFFxeAtElmpBRZLpFdHrbhzCMMzi-dToKfWxW0h4ZP6R8pr_l4OzvKAPjhxGjZ_wwwvwrAAD__xdDsek">