Внутренняя ошибка компилятора (ICE) встречается с GCC, а компиляция с Clang также дает запутанные сообщения об ошибкахC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Внутренняя ошибка компилятора (ICE) встречается с GCC, а компиляция с Clang также дает запутанные сообщения об ошибках

Сообщение Anonymous »

Отчет об ошибках GCC можно найти по адресу: https://gcc.gnu.org/bugzilla/show_bug.c ... 5555555555 Время компиляции, рассчитайте общее количество переменных элементов, «постепенно пытаясь построить класс агрегата». < /p>
2. std :: source_location в масштабах шаблона, и проанализируйте имя переменной члена. < /p>

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 

template
struct reflect_member_handler {};

struct type_placeholder
{
template
operator E() const;
};

template
consteval static std::size_t aggregate_member_counter()
{
if constexpr( !requires{ T{ Args{}... }; } )
return sizeof...(Args) - 1;
else
return aggregate_member_counter();
}

template
consteval std::size_t get_member_count() {
return aggregate_member_counter();
}

template
std::string_view Iget_member_name()
{
static std::source_location location = std::source_location::current();

std::string_view func_name = location.function_name();
std::size_t first = func_name.find("::", func_name.find("(&")) + 2;
std::size_t last = func_name.find(")", first);

return func_name.substr(first, last - first);
}

#if 0
//----------------------- Part 1----------------------------
template
struct reflect_member_handler
{
static auto get_member_names()
{
static T object;
static auto& [v0] = object;
std::array names;
names[0] = Iget_member_name();
return names;
}
};
//----------------------------------------------------------
#else
//----------------------- Part 2----------------------------
template
struct reflect_member_handler
{
static auto get_member_names()
{
static std::byte memory[sizeof(T)];
static T& dummy_object = *reinterpret_cast(memory);
static auto& [v0] = dummy_object;
std::array names;
names[0] = Iget_member_name();
return names;
}
};
//----------------------------------------------------------
#endif

struct test_t { int a; };

int main()
{
auto member_names =
reflect_member_handler::get_member_names();
std::cout 
Эта проблема не является ошибкой, связанной с именованием. Как мне объяснить эту проблему?#include 
#include 

template
void test2() {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79744696/an-internal-compiler-error-ice-is-encountered-with-gcc-and-compiling-with-cla[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»