Похоже баг в VS 2005
От: wander  
Дата: 23.12.09 11:25
Оценка:
class C
{
public:
    template <typename T>
    C(int (T::*func)(char const*, const int));

    C(int (*func)(char const*, const int));
};

struct Test
{
    int foo(char const*, const int);
};

int foo(char const*, const int);

int main(int argc, char * argv[])
{
    C c(&Test::foo);

    return 0;
}


Из-за выделенного в коде не компилируется с ошибкой:

error C2664: 'C::C(int (__cdecl *)(const char *,const int))' : cannot convert parameter 1 from 'int (__thiscall Test::* )(const char *,const int)' to 'int (__cdecl *)(const char *,const int)'

Не могу понять как это влияет на невозможность выбора нужного конструктора. Баг?
Re: Похоже баг в VS 2005
От: evjiii  
Дата: 23.12.09 11:44
Оценка:
В VС2008 все нормально.
А в VC2005 не то чтобы невозможность выбора, она просто не видит этого конструктора: если удалить второй (нешаблонный) конструктор, то будет ругаться, что не может использовать дефолтовый конструктор; если удалить шаблонный конструктор, сообщение об ошибке даже не поменяется.
Re: Похоже баг в VS 2005
От: Max M. Ниоткуда  
Дата: 23.12.09 13:38
Оценка: +1
В VS2005 SP1, кстати, все ОК.
// ...
подпись
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.