Сообщение Re: Yet another MSVC 2015 decltype bug? от 04.04.2016 14:35
Изменено 04.04.2016 15:09 B0FEE664
Здравствуйте, SaZ, Вы писали:
SaZ>Это студия тупит или я чего-то не понимаю? В студии не компилируется — говорит, что cannot convert argument 1 from 'void (__thiscall Test::* )(void)' to 'Fn (__thiscall &&)'.
SaZ>Я так понимаю, что студия считает, что Test::fooN<1> это перегрузка. Но, перегрузка — это когда имя метода совпадает, а сигнатуры отличаются. Тут же сигнатуры совпадают, а имена методов — хз
Я не знаю как оно должно быть, но вот так компилируется и запускается:
PS Короче, это bug MS
https://connect.microsoft.com/VisualStudio/feedback/details/775434/decltype-is-buggy-in-vs-2012
https://connect.microsoft.com/VisualStudio/feedback/details/1029542
Исправлять отказываются, предлагают обход:
SaZ>Это студия тупит или я чего-то не понимаю? В студии не компилируется — говорит, что cannot convert argument 1 from 'void (__thiscall Test::* )(void)' to 'Fn (__thiscall &&)'.
SaZ>Я так понимаю, что студия считает, что Test::fooN<1> это перегрузка. Но, перегрузка — это когда имя метода совпадает, а сигнатуры отличаются. Тут же сигнатуры совпадают, а имена методов — хз
Я не знаю как оно должно быть, но вот так компилируется и запускается:
auto aF1 = &Test::fooN<1>;
using Fn1 = decltype(aF1);
test.invoke<Fn1>( &Test::fooN<1> );
test.invoke<Fn1>( &Test::foo );PS Короче, это bug MS
https://connect.microsoft.com/VisualStudio/feedback/details/775434/decltype-is-buggy-in-vs-2012
https://connect.microsoft.com/VisualStudio/feedback/details/1029542
Исправлять отказываются, предлагают обход:
template <typename T> T identity(T);
...
using a = decltype(identity(&Test::fooN<1>));
test.invoke<Fn>( &Test::foo );
test.invoke<Fn1>( &Test::fooN<1> );Re: Yet another MSVC 2015 decltype bug?
Здравствуйте, SaZ, Вы писали:
SaZ>Это студия тупит или я чего-то не понимаю? В студии не компилируется — говорит, что cannot convert argument 1 from 'void (__thiscall Test::* )(void)' to 'Fn (__thiscall &&)'.
SaZ>Я так понимаю, что студия считает, что Test::fooN<1> это перегрузка. Но, перегрузка — это когда имя метода совпадает, а сигнатуры отличаются. Тут же сигнатуры совпадают, а имена методов — хз
Я не знаю как оно должно быть, но вот так компилируется и запускается:
PS Короче, это bug MS
https://connect.microsoft.com/VisualStudio/feedback/details/775434/decltype-is-buggy-in-vs-2012
https://connect.microsoft.com/VisualStudio/feedback/details/1029542
Исправлять отказываются, предлагают обход:
SaZ>Это студия тупит или я чего-то не понимаю? В студии не компилируется — говорит, что cannot convert argument 1 from 'void (__thiscall Test::* )(void)' to 'Fn (__thiscall &&)'.
SaZ>Я так понимаю, что студия считает, что Test::fooN<1> это перегрузка. Но, перегрузка — это когда имя метода совпадает, а сигнатуры отличаются. Тут же сигнатуры совпадают, а имена методов — хз
Я не знаю как оно должно быть, но вот так компилируется и запускается:
auto aF1 = &Test::fooN<1>;
using Fn1 = decltype(aF1);
test.invoke<Fn1>( &Test::fooN<1> );
test.invoke<Fn1>( &Test::foo );PS Короче, это bug MS
https://connect.microsoft.com/VisualStudio/feedback/details/775434/decltype-is-buggy-in-vs-2012
https://connect.microsoft.com/VisualStudio/feedback/details/1029542
Исправлять отказываются, предлагают обход:
template <typename T> T identity(T);
...
using a = decltype(identity(&Test::fooN<1>));
test.invoke<a>( &Test::foo );
test.invoke<a>( &Test::fooN<1> );