Нужна цитата из стандарта о легальности основной функции как функции шаблона - PullRequest
7 голосов
/ 16 ноября 2011

По какой-то причине я попытался определить основную функцию как функцию шаблона, используя clang 2.9:

template <typename T = void>
int main(int argc, char **argv)
{
}

и получил следующую ошибку.

error: 'main' cannot be a template
int main(int argc, char **argv)
    ^

Кто-нибудь знает, какой раздел стандарта запрещает это и каков соответствующий текст?

Ответы [ 2 ]

15 голосов
/ 16 ноября 2011

Ну, как насчет этого (3.6.1):

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

Поскольку шаблоны не являются функциями, я не думаю, что у вас есть выбор в этом вопросе. В частности, функция должна быть main, а не main<>, как в вашем примере; и ваш main не функция, а шаблон, исключающий существование другой функции с именем main.

0 голосов
/ 16 ноября 2011

Шаблоны функций должны быть объявлены в файле .h.

...