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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] Incorrect "Case value is not a constant expression"
        </td>
    </tr>

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

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

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

<pre>
    **Problem:**
Clang (both `clang++` and Clangd) incorrectly produces an error "Case value is not a constant expression" when attempting to use a static enumerator (e.g., `State::EnumType::A`) accessed through an instance of its containing struct (`state.A`) within a `switch` statement's `case` label. This should be a valid constant expression according to the C++ standard.

**Expected Behavior:**
The code should compile successfully, as `state.A` refers to the constant enumerator `State::EnumType::A` and is suitable for a `case` label. GCC compiles this code without issues.

**Reproducer Code:**
```c++
struct State {
    enum EnumType { A, B };

    EnumType value;

    constexpr operator EnumType() const noexcept { return value; }
};

struct Foo {
    State state;

    void workaround() {
 auto stateCopy = state;

        switch (stateCopy) {
            case stateCopy.A: // This compiles successfully with Clang.
            case stateCopy.B:
                break;
        }
    }

    void shouldCompile() {
        switch (state) {
            case state.A: // Clang error: "Case value is not a constant expression clang(expr_not_cce)"
            case state.B:
                break;
 }
    }
};
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVV-P4jYQ_zTmZXSR1wkQHvIA7FH1rWr3_eTYA3E32JH_sEs_fTVOWEK77d1FkSDOeH5_ZjKWIZiTRWzYcseWzwuZYud884p_Xf2idfraMLFlYvubd22PZ1Zux2fGt_te2hMwUbcudsBWXNECEzu6Vxyk1ZBjNBMbMFY571HF_gqDdzopDCAtoPfOAxNiLwPCRfYJwQSwLoIE5WyI0kbA98FjCMZZJgS8dWhBxojnIRp7guggBQQJIcpoFKBNZ_Qy5sQ1FqeCiT0x_CPKiKSh3H616fxyHaanLVtxYimVwhBQQ-y8S6eOGJrMQSG4I5gYiFSUxhJwiD6pSCBsxQkci1umNxM7Y0ESbHgzUXXkSY45o41MrEP2TAakF71ssS_gpTMBQudSr6ElRRfZG_2ZD0TVeT3Jjx3CfrSeMKyWXheMU5nGen19H1BF1LDDTl6M8_NKvnQIymm8ISt3HkyPEFK245j6_koOykz5rhM8HtGHG4E7y5n_3zE9dwlpTibKtkc4Oj-a9g9nftnvb7wCRLIpMyabXYpgQkgYHiT_jlOfedg7jXPBVKN8q6ld-XYqZSYLbE1LAJClwI02rcOWnNgBWz-zcjfiUeBHTG7hh1fZF6ocuGGy5cMIUVOz5AiwDt8VDjHDeIzJ249sGY9v56gT44NzM74j_zBaPuNwcUbDm_Ov0rtk9YQ77ZMpunHP3g1XYOXzJxnoGhuZ-v0jepZmdlHx7hkLqjYwcWDiMLb4RyXnLZaLOY6M4v_z7aiYjxF0tR7l60j6tjTadv83t2Ps9v1I5dGRz_V-T-uDznE85vE2rv7ohINpjta09M26-E0pgmZC_DfyDzjyLytyLy10U-pNuZELbJ7WVb2pSrGqFl1Tt_XT5kke1yvOj9USJUq-edpUrVpyruvjwjSCiyVf8ZJvykpUxRK1LkteV-W6rjdLySqOZ2n6ou8v58L50yJ_pc1TJZar1SJ_2CEfPEJMmgWdQb6hDV_adAqs4r0JMdxTRBP7fFplf9nyGX69nSw_d4osku-bLsYh5MlANTuZ2KW2UO7MxIEQp58vg3d_oopMHMY5w8RhEnFpxN8BAAD__4X3OVs">