加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:00:57 所属栏目:百科 来源:网络整理
导读:我有以下测试代码: // friendfunction.h #include iostreamtemplatetypename T,unsigned int... TDIM class MyClass{ templatetypename T1,typename T0,unsigned int... TDIM0,class friend inline const MyClassT0,TDIM0... myFunction(const T1 x,const M
我有以下测试代码:

// 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出错了……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读