Почему не удается создать экземпляр шаблона класса для неиспользуемой функции шаблона членаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему не удается создать экземпляр шаблона класса для неиспользуемой функции шаблона члена

Сообщение Anonymous »


Что здесь не так:

#include структура А; шаблон структура Б { template недействительный f1() {} }; шаблон структура С {}; // Введите здесь свой код или загрузите пример. интервал основной() { // Следование не удалось Б б; // Можно использовать это: // b.f1(); // Это соответствует С с; вернуть 0; } /* Включено оно или нет, не имеет значения структура А {}; */ Я пробовал это здесь: https://godbolt.org/z/NkL44s с разными компиляторами:
[*]x86-64 gcc 9.2: компилируется [*]x86-64 gcc (магистраль): сбой [*]x86-64 clang 6.0.0: компилируется [*]x86-64 clang 7.0.0 и более поздние версии: сбой [*]x64 msvc v19.22: компилируется [*]x64 msvc v19.23 (протестировано внутри компании): ошибка
Так почему же более поздние составители отвергают это? При создании экземпляра B неясно, в какой форме будет использоваться f1 и будет ли он использоваться вообще. Так почему же компилятор на это жалуется? Не следует ли проверять функцию шаблона члена f1 только в том случае, если она действительно используется?

Изменить:
Как упоминалось в комментариях, я допустил непреднамеренную ошибку в приведенном выше коде: std::enable_if должен был быть std::enable_if_t, как в этой исправленной игровой площадке: https:// godbolt.org/z/cyuB3d

Это меняет представление о том, что компиляторы передают этот код без ошибок:
[*]gcc: ошибка [*]clang: неудачно [*]x64 msvc v19.22: компилируется [*]x64 msvc v19.23 (протестировано внутри компании): ошибка
Однако остается вопрос: почему параметр шаблона по умолчанию для функции, которая никогда не используется, приводит к сбою компиляции?
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Удалить память неиспользуемой переменной в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Использование члена int в качестве параметра шаблона внутри функции-члена consteval
    Гость » » в форуме C++
    0 Ответы
    66 Просмотры
    Последнее сообщение Гость
  • Как захватить члена класса члена класса в лямбда-выражении
    Anonymous » » в форуме C++
    0 Ответы
    92 Просмотры
    Последнее сообщение Anonymous
  • Как захватить члена класса члена класса в лямбда-выражении
    Anonymous » » в форуме C++
    0 Ответы
    120 Просмотры
    Последнее сообщение Anonymous
  • Перегрузка функции шаблона члена C++ std::enable_if для класса шаблона
    Anonymous » » в форуме C++
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous

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