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

    <tr>
        <th>Summary</th>
        <td>
            [Clang] template with NTTP param is static array element failed to compile
        </td>
    </tr>

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

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

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

<pre>
    it's code from CV-cuda, migrate to clang

```c++
#include <cstddef>
#include <stdint.h>
#include <utility>
#include <tuple>
template<bool Active = true, typename T>
constexpr inline bool IsOutside(T c, T s)
{
    if constexpr (Active)
    {
        return (c < 0) || (c >= s);
    }
 return false;
}


template<bool... ActiveDimensions>
class BoolDimension
{
public:
    static constexpr int  kNumDimensions = sizeof...(ActiveDimensions);
    struct ActiveMap
    {
        bool from[kNumDimensions];

        constexpr ActiveMap()
            : from()
        {
            int j = 0;
            for (int i = 0; i < kNumDimensions; ++i)
            {
                if (kActiveDimensions[i])
                {
                    from[i] = j++;
                }
            }
        }
    };

    static constexpr ActiveMap kMap{};
    static constexpr bool kActiveDimensions[]  = {ActiveDimensions...};
    static constexpr int  kNumActiveDimensions = ((ActiveDimensions ? 1 : 0) + ...);
    int64_t m_tensorShape[kNumActiveDimensions] = {0};

    template<typename... Args, std::size_t... Is>
    inline  bool check(std::index_sequence<Is...>, Args... c) const
    {
        //static constexpr const  auto kDimensions = std::make_tuple(ActiveDimensions...);
        //if ((IsOutside<std::get<Is>(kDimensions)>(c,false) || ...))
        if ((IsOutside<kActiveDimensions[Is]>(c,false) || ...))
        {
 return true;
        }
        return false;
    }
};

int main() {
 BoolDimension<true, true, false, false> d;
    constexpr auto Is = std::make_index_sequence<1>{};
    return d.check(Is, false);
}
```

in check function, IsOutside not accept array element, change to tuple with get is ok

https://godbolt.org/z/n1K5vGcrE


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVl2P6jYT_jXmZrRRsAmBCy74WF6hVz2t1FVvV8Yx4MVx0niy5-z59dXYgQDhVGoUCZP5fMbPjC29N0en9YJlK5ZtRrLFU9Usvkt3PGnnT60Z7avia2GQ8dyDqgoNh6YqYf3Xi2oLyfgaSnNsJGrACpSV7sjSJb3TNL6K8RW96ZJxYZyybaGBibXyWBT6wMTrQOSxMA6T0zNZi8Ya_Homwra2OgpQl7WVqJlY76vKwlKh-SSlDWDTakobv2rtZKnhLZqoynnUP-oGjLPGaQiGO_97i94UmvHZGygyfAPP-Jyi54QKAMAcoDdnfBbDRS2S95r0NBrbxpGeorQhZXwOLF-zfH35-EqZhjBidfWxoVVnfJDW6yiMgvg-4E6SpIO-MaV23lTOd2it9B5WVWWvkiuiut1bo5hYdpE9SjQKbguEAOdvbdl7DaX15qeuDkmSXEtwE_YWi8emVdil9pusn5Yp1J_IxrLVfTCWbTrovXafXe-Vz_otuDxMLKPTR-F98LCrDuEjAEv71C_PoQo7TTrmqhOW64fS0PfYA-ZJOoOoHZ8Yn50HNcxWhrAPvPzaU0g11pBMQ6YfXUcOMN3Q7Jdf-n-0ut2FAU2uGwFn2o18dbV4qh72-xlmyjskzvLVo5jI9q9er1x9tIweiQUDrgITWxgHqsTe5CsIrL6hsHE4nbwjlO-ona-aP0-y1h1Thxg2l_zTx6rddOxlIoWubY6eho3HghpRLKm33pFEu66FYxZhVMXaqZNWZ8ZnVxvjCv3j3eu_W-0URdiFeolX8kwRyJ0ihKFeT7uQ8S3j20FZwwpAtljB-XEMXOKX8qzf41QeFvmxoH2wyH7GZ_3wDWdCdHrUGJAEGLPzw4ShbzSl43zs52oX7a5znsZ5RsBdnDj_xXdXxG5ahzPnHuldUw2Heq9zSxgicymNi8PrEuR-iov19YTrfrt8LwvxCkUfpN_SsJe7Z1s44NGYivHQzx2GIrnQcOdvgs_vzqrL3eCCKlIXDq1TSBj4uj94wVUIUildI8imkV-grS61Q9JSJ-mO4eoRaAbfDZ7gqBGMh-oc3Z8Qa09oArmOVbGvLCZVc2R8-5PxrRv_P_v8n2peo_qoWIhiLuZypBfjfMLnORfZeHRaiKmc5KqYc57JnAsuprOZFNP9nBdacClHZsFTnqWCT9NpNh-Pk0nKRZ7O-F7J_ThLUzZJdSmNTaz9LCmDkfG-1YuxEOkkH1m519aHqxjn8SrFOd3KmgUZvOzbo2eT1BqPvneBBm24v62DRba5jpRYjW9vb39ALRtZUlG6Rr4rJByksboIF7iqrI3Vo7axi4e6GTy1-0TRybml4N3PS91UH1oh9S2B8YxvOzyfC_5PAAAA___J9QKf">