簡體   English   中英

應該將基類的函數模板賦值給指向成員函數的指針

[英]Should function template of base class be assignable to pointer-to-member-function

以下代碼應該在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提供有關錯誤報告的信息。

我剛剛閱讀了大部分的C ++ 98標准,第14章。關於什么類型的結果(專門的)模板成員沒有太多說法,所以我認為它遵循的想法是作為模板方法不會它不是一種方法。 我有一點時間,我會看看C ++ 11是否會更多地說明它。

根據我對C ++的一般看法,我知道你的代碼應該通過 - 大多數編譯器都同意這個也是一個線索,不是嗎? :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM