可以在朋友声明中使用注入类名吗?

时间:2017-06-09 18:07:38

标签: c++ visual-c++ visual-studio-2015

以下示例无法在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错误,还是其他的东西在这里?

0 个答案:

没有答案