c – 朋友功能默认模板:英特尔ICPC警告

c – 朋友功能默认模板:英特尔ICPC警告,第1张

概述我有以下测试代码: // friendfunction.h #include <iostream>template<typename T, unsigned int... TDIM> class MyClass{ templ 我有以下测试代码:

// 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

并使用intel 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,TDIM0...>& y);

有人有解决方案来避免这种情况吗?

此外,你是否发现友元函数的语法完全正确/安全,或者你认为它可以为一些奇怪的情况产生错误?

解决方法 只是猜测,但似乎icpc希望参数包是最后一个模板参数.如果包中的variadic参数无法与包后面的另一个参数区分开来,那么这是合理的,恕我直言.但在你的情况下,可变参数是整数,下一个是类类型,所以看起来icpc出错了…… 总结

以上是内存溢出为你收集整理的c – 朋友功能默认模板:英特尔ICPC警告全部内容,希望文章能够帮你解决c – 朋友功能默认模板:英特尔ICPC警告所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1226187.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存