Как работает специализация шаблона Auto Return Type с различными типами возврата?C++

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

Сообщение Anonymous »

Я читаю «C ++ 17 Полное руководство» от Josuttis, и он упоминает в ранней главе, что полные специализации шаблонов должны иметь одинаковую подпись и тип возврата, потому что специализации-это только реализации, а не новые объявления. Он показывает эти два примера, которые я упростил. Я также проверил, чтобы убедиться, что они работают так же в C ++ 23.

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

using namespace std::literals;

template auto func1();
template auto func1() { return "1"s; }
template auto func1() { return 1; }
< /code>
не снимается: < /p>
using namespace std::literals;

template auto func2();
template std::string func2() { return "1"s; }
template         int func2() { return 1; }
< /code>
Он не предлагает дополнительных объяснений или ссылок на другие части книги. < /p>
Это смутило меня; Насколько я понимаю, в успешном примере Func1  
должен иметь свой тип возврата, выведенный в STD :: String и func1 к int . Но тогда у нас будет та же проблема, что и во втором примере. Итак, как func1 успешно скомпилируется? Разве его специализации не имеют разных типов возврата? Он приводит еще один пример, который успешно компилируется (модифицировано в соответствии с более ранними примерами): < /p>

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

using namespace std::literals
using types = std::tuple;

template auto func3() -> std::tuple_element_t;
template std::string func3() { return "1"s; }
template         int func3() { return 1; }
Это имеет смысл для меня, и он показывает мне механизм, с помощью которого компилятор может получить func1 для компиляции: вывести типы возврата специализаций для строки и int , затем вывести общий тип возврата шаблона, чтобы зависеть от его параметра шаблона с чем -то вроде Tuple_element_t . Однако, если компилятор смог сделать этот второй шаг, я не вижу причин, по которой он не сможет использовать его для func2 . Почему это не может быть сделано для func2 ?


Подробнее здесь: https://stackoverflow.com/questions/796 ... return-typ
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Более эффективно использовать if-return-return или if-else-return?
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Задача по электронной почте return return return, но не отправляйте электронную почту, иногда
    Anonymous » » в форуме Php
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Частичная специализация шаблона класса с нетиповым параметром шаблона decltype(auto)
    Anonymous » » в форуме C++
    0 Ответы
    64 Просмотры
    Последнее сообщение Anonymous
  • C# Наследство интерфейса с различными типами возврата?
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Наследство интерфейса с различными типами возврата?
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

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