次のコードはC++98/03でコンパイルする必要がありますか?
struct Base
{
template <typename T> void func () { }
void norm() { }
};
struct Derived : public Base { };
template <typename U>
struct Usage
{
typedef void (U::*Method)();
Usage(Method test) { }
};
int main()
{
Usage<Derived> good(&Derived::norm);
// "Error: Cannot use void(*)() to initialize Usage<Derived>." on next line
Usage<Derived> bad(&Derived::func<int>);
return 0;
}
このコードスニペットは、私が試すことができたほぼすべてのコンパイラで問題なく機能しました。Sun C++5.11およびSunC++5.12を保存します。
それはバグでしょうか?もしそうなら、それがベンダー(現在はOracle)に報告されているかどうか誰かが知っていますか?
編集:
C++03またはC++11標準文書のいずれかから適切な関連する引用を提供する回答を受け入れます。または、Oracleでバグレポートに関する情報を提供できる場合。