В предыдущем вопросе команда GCC определила, что причина ошибки внутреннего компилятора (ICE) была неспособности GCC, чтобы правильно согласиться с адресом. Адрес, где адрес объекта происходит из статической переменной и обрабатывается через ReinterPret_CASC. Однако, если обрабатывается только этот основной объект, GCC 15.2 x86-64 успешно компилируется, в то время как Clang 20.1.0 x86-64 не сможет скомпилировать. (Https://godbolt.org/z/hdvfdzjb5):
Код: Выделить всё
#include
template
void test2() {}
template
void test1()
{
static std::byte memory[sizeof(T)];
static T& dummy_object = *reinterpret_cast(memory);
test2();
}
int main() {
test1();
}
< /code>
Ниже приведен отчет об компиляции от Clang 20.2.0: < /p>
:11:5: error: no matching function for call to 'test2'
11 | test2();
| ^~~~~~~~~~~~~~~~~~~~
:15:5: note: in instantiation of function template specialization 'test1' requested here
15 | test1();
| ^
:4:6: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'E'
4 | void test2() {}
| ^
1 error generated.
Compiler returned: 1
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-in-clang