以下では :
template<typename Type>
struct MyClass
{
template<typename OtherType> MyClass(const MyClass<OtherType>& x);
template<typename OtherType = Type> void test(const MyClass<OtherType>& x);
};
関数test
内で何が行われるか:
ケース 1 :デフォルトのパラメーターは priority です: 変換コンストラクターMyClass<Type>(const MyClass<OtherType>& x)
が暗黙的に呼び出され、MyClass<Type>::test<Type>(const MyClass<Type>& x)
呼び出されます。
ケース 2 :推定されたパラメーターが優先度の場合:MyClass<Type>::test<Type>(const MyClass<OtherType>& x)
が呼び出されます。
良い答えは2番目だと思いますが、よくわかりません。(そして、この状況は標準によって明確に定義されていることを)確認できますか?
編集: テスト関数は次のように呼び出されます:
MyClass<double> d;
MyClass<unsigned int> ui;
d.test(ui); // <- So the question is : is ui implicitely
// converted to MyClass<double> or not ?