Здравствуйте, Kir., Вы писали:
K>Подскажите, какой компилятор сможет съесть вот такое:
Предлагаю этюд для С++гуру: сделать библиотечное решение данной проблемы.
Для целочисленных — легко
enum placeholder { _ };
// то, что он ещё и равен 0, - дополнительная фича (где-то полезная, где-то вредная)
template<class T, T V = T()> struct value
{
T v;
value() : v(V) {}
value(placeholder) : v(V) {}
template<class U> value(U u) : v(u) {}
T get() const { return v; }
operator T() const { return v; }
};
void foo(value<char,'c'> x, value<int,7> y, value<unsigned,9> z)
{
cout << x.get() << " " << y.get() << " " << z.get() << endl;
}
int main()
{
foo('a' , _ , _ );
foo( _ , 2 , _ );
foo( _ , _ , -3 );
}
(
http://codepad.org/i2KUUWrc )
Как обобщить на произвольные типы? И как подсовывать по дефолту значения времени исполнения?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>