parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

bug fixed, CVS|HEAD -- странности VS2005, вдруг кто разобрался?

Александр Петросян (PAF) 03.02.2006 18:24

увы, 149 тестов сделал [перед выкладыванием все прошли], надо было сделать 150!

из приятного: в новой Visual Studio 2005 выдаётся на это место ясный warning:
*outptr++ = (unsigned char)saved >> 16;
.\pa_common.C(925) : warning C4333: '>>' : right shift by too large amount, data loss
раньше (VS 2003; старенькие gcc) не выдавался.

что неприятно: очень много такого
hash.foreach(callback, &info);
не компилится, компилятор настаивает на
hash.foreach<Info*>(&callback, &info);
причём в официальном списке обратных несовместимостей об этом ни слова. и в некоторых местах подобный template parameter deducing проходит.

говорит злое:
#так компилится
charsets->for_each<Request_charsets*>(load_charset, &this->charsets);
#так не компилится
charsets->for_each(load_charset, &this->charsets);
#полнейший бред выдаёт...
.\pa_request.C(223) : error C2784: 
'void Hash<K,V>::for_each(void (__cdecl *)(K,V,I),I) const' : 
could not deduce template argument for 
'void (__cdecl *)(K,V,I)' 
from 
'void (__cdecl *)(const String::Body,Value *,Request_charsets *)'
        with
        [
            K=const String::Body,
            V=Value *
        ]
        y:\parser3project\parser3\src\include\pa_hash.h(327) : see declaration of 'Hash<K,V>::for_each'
        with
        [
            K=const String::Body,
            V=Value *
        ]
вдруг кто уже разобрался?

вот это, скажем, компилится без проблем:
#скажем, в untaint.C в конце эта штука:
	langs.for_each(body, cstr_to_string_body_block, &info);
#вполне успешно скомпилилась без дополнительных пояснений
	int cstr_to_string_body_block(
		char alang, 
		size_t fragment_length, 
		Cstr_to_string_body_block_info* info)