Это заявление от C++ 03 стандарта, §14.7.1p5:Confused о неявном шаблоне конкретизации
Если процесс разрешения перегрузки может определить правильную функцию вызвать без инстанцирования определения шаблона класса , это неуказано, действительно ли это создание. [Пример:
template <class T> struct S { operator int(); }; void f(int); void f(S<int>&); void f(S<float>); void g(S<int>& sr) { f(sr); // instantiation of S<int> allowed but not required // instantiation of S<float> allowed but not required };
- конец пример]
Я не могу понять это. Есть ли неопределенное поведение?
Я нашел еще similar problem, который я также не понимаю. Там объясняется, что правильное поведение не определено, но что это значит?
здесь: MSVC: Implicit Template Instantiation, though templated constructor not used
Хотя [определения C++] (http://stackoverflow.com/q/2047172/54262) может помочь ему больше, чем C, так как он, очевидно, имеет копию стандарта C++. – 2010-10-07 10:44:16
Я знаю Undefined/Unspecified/Определения поведения, определенные при реализации. Но мне нужно уточнить эту программу. – 2010-10-07 11:01:43