Я пытаюсь показать продвижение аргументов по умолчанию в функциях. В частности, я хочу проверить раздел 6.5.2.2. Функциональные вызовы (описано here).Продвижение аргументов по умолчанию в функциях
Я хочу иметь вызов функции без прототипа, чтобы увидеть продвижение аргументов по умолчанию до целого числа, но я получаю ошибку «Функция не принимает 1 аргумент». Это то, что я пытаюсь сделать:
#include<iostream>
using namespace std;
//void Func(char val);
//void Func(int val);
void Func(); // No prototype
int main(int argc, char** argv)
{
char charVal = 'a';
cout << "Func(charVal) - "; Func(charVal);
return 0;
}
void Func(char val)
{
cout << "Char arg. Result: " << val << endl;
}
void Func(int val)
{
cout << "Int arg. Result: " << val << endl;
}
Ожидается, что Func (int) будет вызван из-за продвижения аргументов. Это уже снято со стандарта?
Cheers.
P.S- Я только что видел, что подобные объявления с прототипом не являются частью стандарта C, а не C++. Любая конкретная причина, по которой C++ не поддерживает его?
Только перегрузка 'Func()' находится в области - то, которое принимает нулевые аргументы. Продвижение не имеет к этому никакого отношения. Если другие перегрузки были в области видимости, будет выбрана перегрузка 'Func (char). – 0x499602D2