以下代码是否应该在 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 和 Sun C++ 5.12。
那应该是一个错误吗?如果是这样,有谁知道它是否已报告给供应商(目前是 Oracle)?
编辑:
我将接受从 C++03 或 C++11 标准文档中提供适当相关引用的答案。或者,如果您可以提供有关 Oracle 错误报告的信息。