• visual studio 2010 在使用带namespace友元模板函数声明时的bug


    当然这个的确有点难为编译器了。但的确应该是编译器的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名字空间中的的非模版函数,编译通过。

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

  • 相关阅读:
    c# 让接口实现方法
    码支付 C#
    WebApi 接口返回值类型详解
    阿里云RDS数据库sql server 导入数据并添加作业小结
    IIS 图片 JS CSS 500错误
    XML字符串反序列化为实体
    找不到请求的 .Net Framework Data Provider
    JS通过ClassName禁止DIV点击
    WebRequest请求被中止: 未能创建 SSL/TLS 安全通道
    NetMQ 消息队列
  • 原文地址:https://www.cnblogs.com/fullsail/p/2923856.html
Copyright © 2020-2023  润新知