[英]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.