對(duì)于friend
的用法薯演,C++11
新添加了下面兩個(gè)
friend simple-type-specifier ; //(1)
friend typename-specifier ; //(2)
對(duì)于(1)椅邓,在C++11之前,下面的代碼是無法編譯通過的
#include <iostream>
class B
{};
class A
{
int b;
friend B;
};
int main()
{
return 0;
}
你會(huì)得到如下的編譯錯(cuò)誤:
/home/insights/insights.cpp:8:10: warning: unelaborated friend declaration is a C++11 extension; specify 'class' to befriend 'B' [-Wc++11-extensions]
friend B;
^
class
1 warning generated.
要想編譯成功的化,需要將friend B;
改為friend class B;
锌历。
對(duì)于(2),C++11之前同樣無法編譯通過
#include <iostream>
#include <vector>
class B
{};
typedef std::vector<B> BVec;
class A
{
int b;
friend typename BVec::value_type;
};
int main()
{
return 0;
}
編譯錯(cuò)誤為:
/home/insights/insights.cpp:12:10: warning: 'typename' occurs outside of a template [-Wc++11-extensions]
friend typename BVec::value_type;
^~~~~~~~~
/home/insights/insights.cpp:12:10: warning: unelaborated friend declaration is a C++11 extension; specify 'class' to befriend 'typename BVec::value_type' (aka 'B') [-Wc++11-extensions]
friend typename BVec::value_type;
^
class
2 warnings generated.