<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">