> ПОЧЕМУ? Почему не работает, как предполагалось? > P.S. Компилятор из VS6.0
Скорее всего, это просто ошибка компилятора, при выборе реализации шаблона происходит некорректное преобразование типа и берется первая частная спецификация, удовлетворяющая этому преобразованию (преобразование char к int еще можно было бы простить, но не наоборот, и уж точно не double к char). В утешение могу сказать, что компилятор от VS.NET 2003 генерит код, выводящий, как и положено, 542.
int main() {
get<char>();
get<int>();
get<double>();
return 0;
}
Предполагалось, что на экран выведется:
5
4
2
Но в реальности выводиться:
5
5
5
При этом, если поменять местами частные спецификации для char и int, т.е. записать:
> ПОЧЕМУ? Почему не работает, как предполагалось? > P.S. Компилятор из VS6.0
Скорее всего, это просто ошибка компилятора, при выборе реализации шаблона происходит некорректное преобразование типа и берется первая частная спецификация, удовлетворяющая этому преобразованию (преобразование char к int еще можно было бы простить, но не наоборот, и уж точно не double к char). В утешение могу сказать, что компилятор от VS.NET 2003 генерит код, выводящий, как и положено, 542.
[C++] template 30.03.03 13:18 Автор: Green Статус: Незарегистрированный пользователь
> > ПОЧЕМУ? Почему не работает, как предполагалось? > > P.S. Компилятор из VS6.0 > > Скорее всего, это просто ошибка компилятора, при выборе > реализации шаблона происходит некорректное преобразование > типа и берется первая частная спецификация, удовлетворяющая > этому преобразованию (преобразование char к int еще можно > было бы простить, но не наоборот, и уж точно не double к > char). В утешение могу сказать, что компилятор от VS.NET > 2003 генерит код, выводящий, как и положено, 542.
Спасибо, утешил.
Перехожу на VS.NET.
Кстати, он поддерживает и инстанирование шаблона шаблоном.
Но вот не до сих пор поддерживает частичную спецификацию шаблона. :о(
> Спасибо, утешил. > Перехожу на VS.NET. > Кстати, он поддерживает и инстанирование шаблона шаблоном. > Но вот не до сих пор поддерживает частичную спецификацию > шаблона. :о(
бета 2003 уже поддерживает.
In the Visual C++ .NET 2003 release, the conformance of the Visual C++ compiler was significantly improved in the following areas:
Defining Member Templates Outside a Class
Compiler Correctly Disambiguates Complex Expressions or Types
Default Initialization of Scalar Types
Templated User Defined Conversions
Universal Character Names
Operator that is Pointer to Function
Support Aggregate Initialization
References Supported as Nontype Template Parameters
Argument Dependent Name (AKA Koenig) Lookup on Functions
Partial Ordering of Function Templates
Partial Specialization of Class Templates
Unicode Support