簡體   English   中英

模板成員函數重載問題

[英]Template member function overloading issue

N4296::13.1/2.2 [over.load]的標准N4296::13.1/2.2 [over.load]說:

同樣,如果其中任何一個是靜態成員函數模板聲明,則不能重載具有相同名稱,相同parameter-type-list和相同模板參數列表的成員函數模板聲明。

所以,我認為以下程序將是不正確的:

#include <iostream>

struct A
{
    template <typename T>
    static void foo(){ }

    template <typename T>
    static int foo(){ return 0; }
};

int main(){ }

DEMO

相比之下,該計划

#include <iostream>

struct A
{
    static void foo(){ }

    static int foo(){ return 0; }
};

int main(){ }

是不正確的

DEMO

第一個例子是錯誤嗎?

目前CWG#1252的主題:

標准不允許重載僅在其返回類型上不同的成員函數(cf enable_if )。

你引用的措辭可能會被修改,因為沒有任何理由不允許在返回類型中基於SFINAE重載成員函數模板; 我認為標准是有缺陷的,實現是正確的。

暫無
暫無

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

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