これはコンパイルされません。
#include <boost/intrusive_ptr.hpp>
class X
{
public:
void intrusive_ptr_add_ref(X* blah)
{
}
void intrusive_ptr_release(X * blah)
{
}
};
int main()
{
boost::intrusive_ptr<X> ex(new X);
}
しかし、これは:
#include <boost/intrusive_ptr.hpp>
class X
{
public:
friend void intrusive_ptr_add_ref(X* blah)
{
}
friend void intrusive_ptr_release(X * blah)
{
}
};
int main()
{
boost::intrusive_ptr<X> ex(new X);
}
この :
#include <boost/intrusive_ptr.hpp>
class X
{
public:
};
void intrusive_ptr_add_ref(X* blah)
{
}
void intrusive_ptr_release(X * blah)
{
}
int main()
{
boost::intrusive_ptr<X> ex(new X);
}
私はそれがSFINAEと関係があると思います(私はまだ理解していません)?フレンド修飾子は、定義された関数を囲まれた名前空間の自由関数として配置しますか?
編集
投稿を削除した人は誰でも、メンバー関数は友人ではなくadd_ref
、release
(これらの特定のメンバー関数はドキュメントには記載されていません...) 問題を解決しました。friend
修飾子でネストされた定義はどうなりますか?