Проблема принципа вывода типов головок шаблона [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема принципа вывода типов головок шаблона [дубликат]

Сообщение Anonymous »

Я пытаюсь понять, почему компилятор не смог выполнить все вычеты с помощью кода типа:

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

template 
struct TupleX;

template 
struct TupleX< std::tuple > // Error
{
using Tail = tail_type;
};

using FooX = std::tuple;
using BarX = typename TupleX::Tail;
Visual C++ 2022 не удается собрать его с помощью:

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

error C2027: use of undefined type 'TupleX' see declaration of 'TupleX'
error C2061: syntax error: identifier 'Tail'
Хотя в обратном порядке вывод работает так, как ожидалось:

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

template 
struct TupleX;

template 
struct TupleX< std::tuple >
{
using Head = head_type;
};

using FooX = std::tuple;
using BarX = typename TupleX::Head;

static_assert(std::is_same_v);
Учитывая все вышесказанное, я сформировал несколько вопросов, надеюсь правильных.
  • Есть ли логическая ошибка? в предложенной мной реализации? (Я понимаю синтаксическую ошибку, но мне интересно, не нарушен ли в выражении какой-то фундаментальный принцип)
  • Этот тип дедукции, поддерживаемой другими компиляторами?
  • Это случай, определенный стандартом? (я пропустил некоторые документы, но не найди ответ)


Подробнее здесь: https://stackoverflow.com/questions/790 ... le-problem
Ответить

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

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

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

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

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