Здравствуйте, Art, Вы писали:
Art>Art>template<class T, T defval = T()>
Art>class alloc_pool {
Art>
Art>VC6.0 прекрасно компилирует и код выполняется
Art>VC7.NET сообщает: <...> constant expression expected
В некотором роде это спорный вопрос... С одной стороны, 5.19/1 не дает явного разрешенея использовать
T() в интегральных константных выражениях. С другой, разрешает использовать преобразования типов.
При этом, выражение T() описано в пункте 5.2.3 Explicit type conversion (functional notation)...
Более того, по этому поводу имеется соответствующий
defect report.
В принципе, я бы сказал, что int() скорее является интегральным константным выражением, чем нет :-)
Современные компиляторы (Comeau, Borland, Gcc), кроме VC7, с этим утверждением согласны.
Art>И что с этим делать?
Думаю, такой код не вызовет нареканий ни у одного компилятора:
template<class T, T defval = 0>
class alloc_pool {
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен