如何解决MSVC是否有解决此代码的“内部编译器错误”的解决方法?
由于某种原因,以下代码给了我fatal error C1001: Internal compiler error.
with MSVC 19.27,but not with Clang。知道如何编写它以便static_assert
也可以在MSVC上完成吗?
template <typename T,int N,typename K,int M>
constexpr int countIdentifersNotInArray(const T(&identifiers)[N],const K(&array)[M]) {
auto find = [&array](const unsigned char value) {
for (const auto& a : array) {
if (a == value) {
return true;
}
}
return false;
};
int count = 0;
for (const auto& value : identifiers) {
if (!find(value)) {
++count;
}
}
return count;
}
constexpr bool testIt() {
return countIdentifersNotInArray({ 0x01,0x02 },{ 0x01 });
}
int main() {
static_assert(testIt());
return 0;
}
我想在无法使用stl的环境中使用此功能,因此没有该功能的解决方案将非常有趣。
解决方法
正如评论所指出的,这是一个MSVC错误,您绝对应该向Microsoft报告。
通过删除多行直到停止编译器崩溃,我相信原因是范围循环。因此,由于它们是已知大小的数组,因此您可以使用经典的索引循环来解决:
template <typename T,int N,typename K,int M>
constexpr int countIdentifersNotInArray(const T(&identifiers)[N],const K(&array)[M]) {
auto find = [&array](const auto value) {
for (int i = 0; i < M; i++) {
if (array[i] == value) {
return true;
}
}
return false;
};
int count = 0;
for (int i = 0; i < N; i++) {
if (!find(identifiers[i])) {
++count;
}
}
return count;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。