Yet another MSVC 2015 decltype bug?
От: SaZ  
Дата: 04.04.16 13:46
Оценка: 1 (1)
Есть такой код:

class Test
{
public:
    void foo()
    {
        std::cout << 0 << std::endl;
    }
 
    template< int N >
    void fooN()
    {
        std::cout << N << std::endl;
    }
 
    template< typename Fn >
    void invoke( Fn&& fn )
    {
        (*this.*fn)();
    }
 
};
 
int main( int args, char *argv[] )
{
    Test test;
 
    using Fn = decltype(&Test::fooN<1>);
    test.invoke<Fn>( &Test::foo );  // В моей задаче автовыведение типа не прокатит
    test.invoke<Fn>( &Test::fooN<1> );
 
    return 0;
}


Это студия тупит или я чего-то не понимаю? В студии не компилируется — говорит, что cannot convert argument 1 from 'void (__thiscall Test::* )(void)' to 'Fn (__thiscall &&)'.
Я так понимаю, что студия считает, что Test::fooN<1> это перегрузка. Но, перегрузка — это когда имя метода совпадает, а сигнатуры отличаются. Тут же сигнатуры совпадают, а имена методов — хз
Отредактировано 04.04.2016 13:55 SaZ . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.