Здравствуйте, atanasyan, Вы писали:
Если взять твой пример без шаблонов, то не скомпилится
потому что компилятор не знает что взять или конструктор
S2(const S1 &);
или оператор преобразования
operator S2() const;
тоже самое в твоём примере, если мы специализируем
operator S2<0> () const
то есть я веду к этому
в случае как есть, он выбирает конструктор потому что
он как бы "специализирует" шаблонный оператор преобразования
в принципе ты можешь запретить конструктор преобразования explicit-ом