Ответ 1
Первую (шаблонную) перегрузку следует выбрать.
В пункте 13.3.3/1 стандарта С++ 11 указывается:
[...] жизнеспособная функция
F1
определяется как лучшая функция, чем другая жизнеспособная функцияF2
, если для всех аргументовi
,ICSi(F1)
не является худшей последовательностью преобразования, чемICSi(F2)
, а затем- для некоторого аргумента
j
,ICSj(F1)
- лучшая последовательность преобразования, чемICSj(F2)
, или, если не это,- контекст - это инициализация по пользовательскому преобразованию (см. 8.5, 13.3.1.5 и 13.3.1.6) , а стандартная последовательность преобразования из возвращаемого типа
F1
в тип назначения (то есть тип объект инициализируется) является лучшей последовательностью преобразования, чем стандартная последовательность преобразования из тип возвратаF2
к типу назначения. [Пример:struct A { A(); operator int(); operator double(); } a; int i = a; // a.operator int() followed by no conversion // is better than a.operator double() followed by // a conversion to int float x = a; // ambiguous: both possibilities require conversions, // and neither is better than the other
-end example] или , если не тот,
-
F1
- это функция без шаблона, аF2
- специализированная функция шаблона или, если не это,[...]
Как вы можете видеть, факт, что первый оператор преобразования является шаблоном, становится актуальным только тогда, когда стандартная последовательность преобразования из ее возвращаемого типа (char
в этом случае) к типу назначения (char
, в этом case) не лучше стандартной последовательности преобразования из возвращаемого типа перегрузки без шаблонов (int
, в данном случае) к типу назначения (char
, в этом случае).
Однако стандартное преобразование из char
в char
является Точным соответствием, тогда как стандартное преобразование от int
до char
не является. Следовательно, третий пункт § 13.3.3/1 не применяется, а второй пункт.
Это означает, что следует выбрать первую (шаблонную) перегрузку.