Будет ли автоматический вывод типа вывода на главную работу?

Смогу ли я сделать следующее для основной функции в C ++ 1y (C ++ 14):

auto main() { // ... } 

Таким образом, тип возвращаемого значения автоматически будет int хотя нам не нужно использовать явный return 0; ?

Нет, это не допустимо. В пункте 7.1.6.4/10 Стандартного проекта C ++ 14 N3690 указывается:

Если функция с объявленным типом возвращаемого типа, использующая тип-заполнитель, не имеет операторов возврата, тип возвращаемого значения выводится как результат из оператора return без операнда в закрывающей фигурной скобке тела функции. […]

Это означает, что исключение оператора return в main() сделает его тип void .

Специальное правило, введенное в пункте 3.6.1 / 5 о выходе из конца main() указывает:

[…] Если элемент управления достигнет конца main не встречает оператор return , эффект заключается в выполнении

 return 0; 

В формулировке говорится, что «эффект» во время выполнения программы такой же, как если бы было return 0 , а не что оператор return будет добавлен в программу (что повлияет на вычет типа в соответствии с цитируемым абзацем).

РЕДАКТИРОВАТЬ:

Для этого есть отчет о дефекте ( любезно предоставлен Йоханнесом Шаубом ):

Предлагаемая резолюция (ноябрь 2013 года):

Измените 3.6.1 [basic.start.main] пункт 2 следующим образом:

Реализация не должна предопределять основную функцию. Эта функция не должна быть перегружена. Он должен иметь объявленный тип возвращаемого типа типа int, но в противном случае его тип определяется реализацией. Все реализации Реализация должна

  • функция () возвращающая int и
  • функция ( int , указатель на указатель на char ), возвращающий int

как тип …

  • static_assert зависит от параметра шаблона непигового типа (различное поведение на gcc и clang)
  • Указатели в c ++ после удаления
  • C ++ 11: Исправить инициализацию std :: array?
  • Является ли указатель с правильным адресом и типом все еще всегда действительным указателем с C ++ 17?
  • Зачем использовать std :: bind over lambdas в C ++ 14?
  • Является ли #pragma когда-то частью стандарта C ++ 11?
  • Разрешение перегрузки между объектом, ссылкой rvalue, константой ссылки
  • Инициализатор константного выражения для статического члена classа типа double
  • Являются ли составные литералы стандартными C ++?
  • Понимание примера преобразования lvalue-to-rvalue
  • Можно ли вернуть локальную переменную по значению в C ++ 11/14, чтобы возвращаемое значение было построено по rvalue, когда не задействовано копирование / перемещение?
  • Давайте будем гением компьютера.