class A
{
struct B{};
public:
static void test(A::B){}
};
struct C
{
template<class T>
operator T()
{
return T();
}
};
int main()
{
A::test(C());
}
このコードは、clang 3.7、gcc 5.1およびvC++ 14.2で機能します。
2つの問題、
1.テンプレートでA:Bと推測できるのはなぜですか? (とてもスマート!)
私が知る限り、テンプレートはパラメータの代わりにreturn文で型を推論します。
N4606 12.3.2 6 A conversion function template shall not have a deduced return type (7.1.7.4).
に興味があるものが見つかりました(ただし、7.1.7.4は理解しがたいのでこれ以上の情報はありません)。
2.なぜ変換関数テンプレートA :: Bにアクセスできるのでしょうか?C++ - 変換関数のテンプレート控除、なぜこれは機能しますか?
ありがとうございました。
ああ、私はそれを得た。 ''返される型は '7.1.7.4'であるが、 '変換関数型は返される型が決まらない'。つまり、 '7.1.7.4'は'変換関数 'に慣れていません。私は '7.1.7.4'の部分を読む必要はありません。 – Caesar
'name'ではなく' type'でアクセスコントロールに関する詳しい情報はどこで入手できますか? – Caesar
@Caesarタイプのアクセス制御などはありません。 – Barry