Рассмотрим приведенную ниже функцию bar
, параметр которой имеет значение по умолчанию, инициализированное вызовом перегруженного foo
:
#include <iostream>
int foo(int x)
{
std::cout << "foo(int)" << std::endl;
return 0;
}
template<typename T>
void bar(T a, int x = foo(T(0))) {}
double foo(double x)
{
std::cout << "foo(double)" << std::endl;
return 0;
}
int main()
{
bar<int>(1);
bar<double>(1);
return 0;
}
Я ожидаю, что эта программа выведет
foo(int)
foo(double)
соответствует foo
двум перегрузкам, которые видны при создании bar
.
Вместо этого, когда скомпилировано с g++-4.6
, вывод
$ g++-4.6 -std=c++0x test.cpp; ./a.out
foo(int)
foo(int)
Рассматривается ли множество перегрузок при реализации значения параметра по умолчанию, отличного от нормального разрешения перегрузки? Этот случай описан в стандарте ISO С++?