1
#include <iostream>
template <typename T1, typename T2>
bool func(const T1& t, const T2& t2) {
return t == t2;
}
class Base {
public:
bool operator ==(const Base&) const { return true;}
Base(int y) : x(y) {}
operator int() {
return x;
}
int x;
};
int main() {
func<long, Base>(4L, Base(5)); // not ok
func<long, long>(4L, Base(5)); //ok
}
なぜ最初のバージョンが機能しないのか、誰かが精緻化できますか?言い換えれば、なぜfuncのバイナリ演算子==は、変換演算子intを使用して、Baseにバインドされたテンプレートパラメータをintに変換しないのですか?変換演算子を使用したテンプレートパラメータ
バージョン1の作業を行うには、基本クラスを変更するだけですか?
注:次の2つの暗黙の変換(コンストラクタおよびオペレータ)を持っています。問題を避けるために、1つを「明示的」(おそらくコンストラクタ)にします。 –
ノートのおかげで – mkmostafa