作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下测试代码:
// friendfunction.h
#include <iostream>
template<typename T, unsigned int... TDIM> class MyClass
{
template<typename T1, typename T0, unsigned int... TDIM0, class> friend inline const MyClass<T0, TDIM0...> myFunction(const T1& x, const MyClass<T0, TDIM0...>& y);
};
template<typename T0, typename T, unsigned int... TDIM, class = typename std::enable_if<std::is_fundamental<T0>::value>::type> inline const MyClass<T, TDIM...> myFunction(const T0& x, const MyClass<T, TDIM...>& y)
{
std::cout<<"It works !"<<std::endl;
return MyClass<T, TDIM...>(y);
}
// friendfunction.cpp
#include "friendfunction.h"
int main(int argc, char *argv[])
{
MyClass<double, 3, 3> myClass;
myFunction(10, myClass);
return 0;
}
我用 g++ (4.6.1) 编译:
g++ -Wall -Wextra -Winline -Wno-unused -O3 -std=c++0x friendfunction.cpp -o friendfunction
并且使用英特尔 ICPC(12.1.0 20111011):
icpc -Wall -Wno-unused -O3 -std=c++0x friendfunction.cpp -o friendfunction
使用 g++ 我没有错误也没有警告,但是使用 Intel C++ 我有以下警告:
friendfunction.h(5): warning #2922: template parameter "<unnamed>" cannot be used because it follows a parameter pack and cannot be deduced from the parameters of function template "myFunction"
template<typename T1, typename T0, unsigned int... TDIM0, class> friend inline const MyClass<T0, TDIM0...> myFunction(const T1& x, const MyClass<T0, TDIM0...>& y);
有人有办法避免这种情况吗?
此外,您是否认为友元函数的语法完全正确/安全,或者您是否认为它会在某些奇怪的情况下产生错误?
最佳答案
只是猜测,但 icpc 似乎希望参数包成为最后一个模板参数。如果包中的可变参数无法与包后面的另一个参数区分开来,那么这是有道理的,恕我直言。但在你的例子中,可变参数是整数,下一个是类类型,所以看起来 icpc 弄错了......
关于c++ - 友元函数默认模板 : Intel ICPC warning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11917351/
我是一名优秀的程序员,十分优秀!