簡體   English   中英

嵌套類和ADL

[英]Nested Classes and ADL

這是代碼:

namespace Namespace
{
    struct L0
    {
        enum SomeEnum
        {
            EnumVal
        };

        struct L1
        {
            friend void f(SomeEnum)
            {
                std::cout << "f()" << std::endl;
            }
        };

        friend void g(SomeEnum)
        {
            std::cout << "g()" << std::endl;
        }
    };
}

int main()
{
    f(Namespace::L0::EnumVal); // error: f not defined
    g(Namespace::L0::EnumVal); // good
}

這里的想法是讓編譯器通過ADL找到f()和g()。

但是,此代碼無法使用gcc或clang進行編譯。 類似的代碼似乎在MSVC下編譯正常。

也許我想念一些東西,但我真的不明白代碼有什么問題,以及它是否有問題。 如果有人可以對這一點有所了解,那將會很好。

PS。 新年快樂:)

SomeEnum不是L1的成員,因此ADL找不到L1中定義的函數。

我相信,這是你要找的報價:

在類或類模板X中的友元聲明中首先聲明的名稱成為X的最內層封閉命名空間的成員,但是無法進行查找(除了與X相關的依賴於參數的查找),除非命名空間范圍內的匹配聲明是提供 - 請參閱命名空間以獲取詳細信

暫無
暫無

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

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