以下示例无法在Visual Studio 2015中编译:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
我对injected class names的理解是namespace ns {
template<typename T> class MyClass;
template<typename T>
T Func(const MyClass<T> &a);
template<typename T>
class MyClass {
// (1) With template type, without namespace: compiles
//friend T Func<T>(const MyClass<T> &a);
// (2) With template type, with namespace: compiles
//friend T ns::Func<T>(const MyClass<T> &a);
// (3) Without template type, without namespace: compiles
//friend T Func<T>(const MyClass &a);
// (4) Without template type, with namespace: doesn't compile
friend T ns::Func<T>(const MyClass &a);
};
}
int main() {
ns::MyClass<int> a;
return 0;
}
足以在类本身的范围内识别MyClass
。但是,根据MyClass<T>
的命名空间限定,除非使用Func
,否则Visual Studio 2015无法编译好友定义。
请注意,此示例至少编译为gcc 5.1。这是一个MSVC错误,还是其他的东西在这里?