time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > .net > Visual Studio > VS2010在使用带namespace友元模板函数声明时的bug

VS2010在使用带namespace友元模板函数声明时的bug

时间:2013-04-09 23:18 点击:1033次 字体:[ ]




当然这个的确有点难为编译器了。但的确应该是编译器的bug,上代码。

编译环境visual studio 2010, SP1版本。

  1. namespace ZEN_LIB  
  2.  {  
  3.    
  4.    
  5.  template<typename HASH_STRATEGY>  
  6.  inline unsigned char *hash_fun(const unsigned char *buf,  
  7.      size_t size,  
  8.      unsigned char result[HASH_STRATEGY::HASH_RESULT_SIZE])  
  9.  {  
  10.      ZEN_ASSERT(result != NULL);  
  11.    
  12.      HASH_STRATEGY::context ctx;  
  13.      HASH_STRATEGY::initialize(&ctx);  
  14.      HASH_STRATEGY::process(&ctx, buf, size);  
  15.      HASH_STRATEGY::finalize(&ctx, buf, size, result);  
  16.      return result;  
  17.  }  
  18.  }  
  19.    
  20.    
  21.  class ZEN_Hash_MD5  
  22.  {  
  23.      friend unsigned char * ZEN_LIB::hash_fun<ZEN_Hash_MD5>(const unsigned char *buf,  
  24.          size_t size,  
  25.          unsigned char result[ZEN_Hash_MD5::HASH_RESULT_SIZE]);  
  26.  }; 

编译器在第23行报错,error C2063: 'ZEN_LIB::hash_fun' : not a function

我代码的本意是希望ZEN_Hash_MD5 对外屏蔽所有细节,只对ZEN_LIB::hash_fun 函数放开,但结果发现不行。

在确认应该不是自己写错了后,做了几组测试,

 

1.将ZEN_Hash_MD5 移动到ZEN_LIB 名字空间中,在友元声明上去掉ZEN_LIB,编译通过。

2.将模板函数hash_fun 移动出ZEN_LIB,在友元声明上去掉ZEN_LIB,编译通过。

3.尝试声明一个ZEN_LIB名字空间中的的非模版函数,编译通过。

看来是撞到枪口了,算了。难为编译器了。

 

转自:http://www.cnblogs.com/fullsail/archive/2013/02/23/2923856.html



本文地址 : http://www.fengfly.com/plus/view-212413-1.html
标签: BUG VS2010,namespace 友元模板函数
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: