Re: Аргументы шаблона класса (VC6.0 vs VC++7 NET)
От: Павел Кузнецов  
Дата: 17.02.03 16:31
Оценка: 7 (2)
Здравствуйте, 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 {
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.