The first (template) overload should be picked.
Paragraph 13.3.3/1 of the C++11 Standard specifies:
[...] a viable function
F1
is defined to be a better function than another viable functionF2
if for all argumentsi
,ICSi(F1)
is not a worse conversion sequence thanICSi(F2)
, and then— for some argument
j
,ICSj(F1)
is a better conversion sequence thanICSj(F2)
, or, if not that,— the context is an initialization by user-defined conversion (see 8.5, 13.3.1.5, and 13.3.1.6) and the standard conversion sequence from the return type of
F1
to the destination type (i.e., the type of the entity being initialized) is a better conversion sequence than the standard conversion sequence from the return type ofF2
to the destination type. [ Example: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 ] or, if not that,
—
F1
is a non-template function andF2
is a function template specialization, or, if not that,[...]
As you can see the, fact that the first conversion operator is a template only becomes relevant when the standard conversion sequence from its return type (char
, in this case) to the destination type (char
, in this case) is not better than the standard conversion sequence from the return type of the non-template overload (int
, in this case) to the destination type (char
, in this case).
However, a standard conversion from char
to char
is an Exact Match, while a standard conversion from int
to char
is not. Therefore, the third item of § 13.3.3/1 does not apply, and the second item does.
This means that the first (template) overload should be picked.