首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >友元函数默认模板:英特尔ICPC警告

友元函数默认模板:英特尔ICPC警告
EN

Stack Overflow用户
提问于 2012-08-12 04:20:56
回答 1查看 266关注 0票数 4

我有以下测试代码:

代码语言:javascript
复制
// 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)中,我使用以下命令进行编译:

代码语言:javascript
复制
g++ -Wall -Wextra -Winline -Wno-unused -O3 -std=c++0x friendfunction.cpp -o friendfunction

和英特尔ICPC (12.1.0 20111011):

代码语言:javascript
复制
icpc -Wall -Wno-unused -O3 -std=c++0x friendfunction.cpp -o friendfunction

在使用g++时,我没有收到任何错误和警告,但在使用英特尔C++时,我收到了以下警告:

代码语言:javascript
复制
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);

有没有人有避免这种情况的解决方案?

此外,您是否发现friend函数的语法完全正确/安全,或者您是否认为它会在某些奇怪的情况下产生错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-12 21:15:06

只是猜测,但看起来icpc希望参数包成为最后一个模板参数。如果包中的可变参数不能与包后面的另一个参数区分开来,那么这是合理的,IMHO。但是在您的例子中,可变参数是整数,下一个是类类型,所以看起来icpc搞错了……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11917351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档