Visual studio 2010のnamespace付きメタテンプレート関数宣言時のバグ
3375 ワード
もちろんこれは確かにコンパイラには難しいです.しかし、確かにコンパイラのバグで、コードをつけるべきです.
コンパイル環境visual studio 2010、SP 1バージョン.
コンパイラは23行目でエラーを報告し、error C 2063:'ZEN_LIB::hash_fun' : not a function
私のコードの本意はZEN_を望みますHash_MD 5はすべての詳細を外部に遮断し、ZEN_のみに対してLIB::hash_fun関数は放したが,結果はだめであることが分かった.
自分が書き間違えたのではないか確認した後、いくつかのテストをしましたが、
1.ZEN_をHash_MD 5 ZEN_へ移動LIBネームスペースにて、友元声明にてZEN_を削除LIB、コンパイルパス.
2.テンプレート関数hash_fun移動出ZEN_LIB、友元声明でZENを取り除くLIB、コンパイルパス.
3.ZENを宣言してみるLIB名前空間における非テンプレート関数は,コンパイルにより通過する.
銃口にぶつかったようだが、もういい.コンパイラは難しいです.
コンパイル環境visual studio 2010、SP 1バージョン.
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 C 2063:'ZEN_LIB::hash_fun' : not a function
私のコードの本意はZEN_を望みますHash_MD 5はすべての詳細を外部に遮断し、ZEN_のみに対してLIB::hash_fun関数は放したが,結果はだめであることが分かった.
自分が書き間違えたのではないか確認した後、いくつかのテストをしましたが、
1.ZEN_をHash_MD 5 ZEN_へ移動LIBネームスペースにて、友元声明にてZEN_を削除LIB、コンパイルパス.
2.テンプレート関数hash_fun移動出ZEN_LIB、友元声明でZENを取り除くLIB、コンパイルパス.
3.ZENを宣言してみるLIB名前空間における非テンプレート関数は,コンパイルにより通過する.
銃口にぶつかったようだが、もういい.コンパイラは難しいです.